Entre as muitas técnicas para otimizar o tamanho do código do programa, a maioria inclui a remoção de elementos desnecessários do código. O Visual Basic remove automaticamente certos elementos ao compilar um aplicativo. Não há restrições quanto ao comprimento ou número de nomes de identificadores, comentários e linhas em branco. Quando o aplicativo é executado como um arquivo .EXE, esses elementos não afetarão o tamanho da memória ocupada pelo aplicativo. Outros elementos, como variáveis, formulários e procedimentos, ocupam algum espaço na memória. É melhor simplificá-los para torná-los mais eficientes. A seguir apresentamos 6 métodos que podem ser usados para reduzir a memória exigida pelo aplicativo e reduzir o tamanho do código. Espero que seja útil para iniciantes.
1. Reduza o número de formulários e controles de carregamento e use rótulos em vez de caixas de texto
Cada formulário carregado, visível ou não, ocupa uma certa quantidade de memória (a quantidade varia dependendo do tipo e número de controles no formulário, do tamanho do bitmap no formulário, etc.). Carregue o formulário apenas quando precisar exibi-lo e descarregue-o quando não for mais necessário (em vez de ocultá-lo). Lembre-se de que qualquer referência às propriedades, métodos ou controles de um formulário, ou a uma variável de formulário declarada com New, fará com que o Visual Basic carregue o formulário.
Ao utilizar o método Unload para descarregar um formulário, apenas parte do espaço ocupado pelo formulário pode ser liberada. Para liberar todo o espaço, use a palavra-chave Nothing para invalidar a referência do formulário:
Ao projetar um aplicativo, os formulários devem usar o mínimo de controles possível. O limite real depende do tipo de controle e do sistema, mas na prática, um formulário com um grande número de controles será executado lentamente. Uma técnica relacionada é usar matrizes de controles sempre que possível ao projetar, em vez de colocar um grande número de controles do mesmo tipo no formulário. Uma matriz de controle é um grupo de controles com um nome e tipo comuns. O curso dos acontecimentos também é o mesmo. Em tempo de design, adicionar controles usando uma matriz de controle consome menos recursos do que adicionar vários controles do mesmo tipo diretamente ao formulário. Matrizes de controle também são úteis quando você deseja que vários controles compartilhem código. O controle de rótulo Label ocupa menos recursos do Windows que a caixa de texto Textbox, portanto, quando possível, um rótulo deve ser usado em vez de uma caixa de texto. Por exemplo, quando um controle oculto em um formulário precisa conter texto, o uso de rótulos é mais eficaz.
2. Use arquivos de disco ou recursos e módulos de organização
Os dados colocados diretamente no aplicativo em tempo de design (como strings literais e valores em propriedades ou código) aumentarão a memória ocupada pelo aplicativo em tempo de execução. Carregar dados de arquivos de disco ou recursos em tempo de execução reduz o uso de memória. Isto é especialmente valioso para bitmaps e strings grandes. Os arquivos de recursos são, na verdade, compostos de uma série de strings, bitmaps ou outros itens independentes, cada um dos quais possui um identificador exclusivo. Os arquivos de recursos podem ser criados usando um editor de texto e um compilador de recursos semelhantes aos fornecidos no Microsoft Visual C. Os arquivos de recursos compilados possuem uma extensão .res.
O Visual Basic só carrega módulos quando necessário, ou seja, quando o código chama um procedimento no módulo, o módulo é carregado na memória. Se um procedimento em um módulo específico nunca for chamado, o Visual Basic nunca carregará o módulo. Portanto, tente colocar procedimentos relacionados no mesmo módulo e deixe o Visual Basic carregar o módulo somente quando necessário.
3. Considere substituir o tipo de dados Variant
O tipo de dados Variant é extremamente flexível de usar, mas ocupa mais memória do que outros tipos de dados. Quando você quiser compactar o excesso de espaço em seu aplicativo, considere substituir variáveis Variant por outros tipos de dados, especialmente substituindo matrizes de variáveis Variant.
Cada Variant ocupa 16 bytes, enquanto Integer ocupa 2 bytes e Double ocupa 8 bytes. Uma variável de string de comprimento variável ocupa 4 bytes mais 1 byte para cada caractere na string. No entanto, cada Variant que contém uma string ocupa 16 bytes mais 1 byte para cada caractere na string. Por serem tão grandes, as variáveis Variant são particularmente irritantes quando usadas como variáveis locais ou argumentos para procedimentos porque consomem espaço de pilha muito rapidamente. Mas, em alguns casos, o uso de outros tipos de dados em vez de Variant reduz a flexibilidade e é necessário adicionar mais código para compensar a flexibilidade perdida. O resultado não é uma redução real no tamanho.
4. Use matrizes dinâmicas e recupere memória ao excluir
Use matrizes dinâmicas em vez de matrizes fixas. Quando os dados da matriz dinâmica não forem mais necessários, use Erase ou ReDimPReserve para descartar os dados desnecessários e recuperar a memória usada pela matriz. Por exemplo, use o código a seguir para recuperar o espaço usado por uma matriz dinâmica:
Aqui, Erase exclui completamente o array, enquanto ReDimPreserve apenas encurta o array sem perder seu conteúdo:
A exclusão de uma matriz de tamanho fixo não recupera o espaço ocupado pela matriz — ela simplesmente limpa o valor de cada elemento da matriz. Se os elementos forem strings ou variantes contendo strings ou arrays, a exclusão do array recupera a memória ocupada por essas strings ou variantes, não a memória ocupada pelo próprio array.
5. Recuperar espaço usado por variáveis de string ou objeto
Quando o processo termina, o espaço usado pelas variáveis locais de string e array (não estáticas) pode ser recuperado automaticamente. No entanto, variáveis de string e array globais e em nível de módulo sobrevivem até o final de todo o programa. Se quiser que seu aplicativo seja o menor possível, você deverá recuperar o máximo possível o espaço usado por essas variáveis. Atribuir uma string de comprimento zero a uma variável de string recupera seu espaço:
Da mesma forma, definir uma variável de objeto como Nothing recupera parte (mas não todo) do espaço usado pelo objeto. Por exemplo, para excluir uma variável de objeto Form:
Mesmo que você não esteja usando variáveis de formulário explícitas, você deve ter cuidado ao descarregar formulários que não são mais usados, em vez de simplesmente ocultá-los.
6. Elimine código morto e variáveis inúteis
À medida que você desenvolve e modifica seu aplicativo, você pode ficar com código morto – um processo inteiro em seu código que não é chamado em lugar nenhum. Também pode haver algumas variáveis não utilizadas declaradas. Embora o Visual Basic possa realmente excluir constantes inúteis ao criar arquivos .exe, ele não pode excluir variáveis inúteis e código morto. Tenha cuidado ao revisar seu código para encontrar e remover variáveis inúteis e código morto. Por exemplo, a instrução Debug.Print é ignorada ao executar .exe, mas geralmente aparece em arquivos .exe.
Ao criar um arquivo .exe, as instruções Debug.Print contendo strings e variáveis como parâmetros não são compiladas. Mas para a instrução Debug.Print que contém uma função como parâmetro, ela mesma é ignorada pelo compilador e a função é compilada. Portanto, enquanto o aplicativo está em execução, a função é chamada, mas o valor de retorno é ignorado. Porque no arquivo .exe, quando a função aparece como parâmetro do Debug.Print, ela ocupará espaço e tempo de ciclo da CPU, por isso é melhor excluir essas instruções antes de gerar o arquivo exe.
Use o comando Localizar no menu Editar para procurar referências a uma variável específica. Ou quando cada módulo contém uma instrução OptionExplicit, você pode descobrir rapidamente se a variável é usada excluindo ou comentando a declaração da variável e executando o aplicativo. Se esta variável for usada, o Visual Basic apresentará erro. Se nenhum erro ocorrer, a variável não será usada. ->