Entre las muchas técnicas para optimizar el tamaño del código de un programa, la mayoría incluye la eliminación de elementos innecesarios del código. Visual Basic elimina automáticamente ciertos elementos al compilar una aplicación. No hay límite en la longitud o número de nombres de identificadores, comentarios y líneas en blanco. Cuando la aplicación se ejecuta como un archivo .EXE, estos elementos no afectarán el tamaño de la memoria ocupada por la aplicación. Otros elementos, como variables, formularios y procedimientos, ocupan algo de espacio en la memoria. Es mejor simplificarlos para hacerlos más eficientes. A continuación se presentan 6 métodos que se pueden utilizar para reducir la memoria requerida por la aplicación y reducir el tamaño del código. Espero que sea útil para los principiantes.
1. Reduzca la cantidad de formularios y controles de carga y use etiquetas en lugar de cuadros de texto
Cada formulario cargado, visible o no, ocupa una cierta cantidad de memoria (la cantidad varía según el tipo y número de controles del formulario, el tamaño del mapa de bits del formulario, etc.). Cargue el formulario solo cuando necesite mostrarlo y descárguelo cuando ya no sea necesario (en lugar de ocultar el formulario). Recuerde, cualquier referencia a las propiedades, métodos o controles de un formulario, o a una variable de formulario declarada con Nuevo, hará que Visual Basic cargue el formulario.
Cuando se utiliza el método Descargar para descargar un formulario, solo se puede liberar parte del espacio ocupado por el formulario. Para liberar todo el espacio, use la palabra clave Nothing para invalidar la referencia del formulario:
Al diseñar una aplicación, los formularios deben utilizar la menor cantidad de controles posible. El límite real depende del tipo de control y del sistema, pero en la práctica, un formulario con una gran cantidad de controles se ejecutará lentamente. Una técnica relacionada es utilizar conjuntos de controles siempre que sea posible al diseñar, en lugar de colocar una gran cantidad de controles del mismo tipo en el formulario. Una matriz de controles es un grupo de controles con un nombre y tipo común. Su curso de acontecimientos también es el mismo. En tiempo de diseño, agregar controles usando una matriz de controles consume menos recursos que agregar múltiples controles del mismo tipo directamente al formulario. Las matrices de controles también son útiles cuando desea que varios controles compartan código. El control de etiqueta Label ocupa menos recursos de Windows que el cuadro de texto Textbox, por lo que, cuando sea posible, se debe utilizar una etiqueta en lugar de un cuadro de texto. Por ejemplo, cuando un control oculto en un formulario necesita contener texto, usar etiquetas es más efectivo.
2. Utilice archivos de disco o recursos y módulos de organización
Los datos colocados directamente en la aplicación en tiempo de diseño (como cadenas literales y valores en propiedades o código) aumentarán la memoria ocupada por la aplicación en tiempo de ejecución. Cargar datos desde archivos de disco o recursos en tiempo de ejecución reduce el uso de memoria. Esto es especialmente valioso para cadenas y mapas de bits grandes. Los archivos de recursos en realidad se componen de una serie de cadenas independientes, mapas de bits u otros elementos, cada uno de los cuales tiene un identificador único. Los archivos de recursos se pueden crear utilizando un editor de texto y un compilador de recursos similares a los proporcionados en Microsoft Visual C. Los archivos de recursos compilados tienen una extensión .res.
Visual Basic solo carga módulos cuando es necesario, es decir, cuando el código llama a un procedimiento en el módulo, el módulo se carga en la memoria. Si nunca se llama a un procedimiento en un módulo particular, Visual Basic nunca carga el módulo. Por lo tanto, intente colocar procedimientos relacionados en el mismo módulo y deje que Visual Basic cargue el módulo sólo cuando sea necesario.
3. Considere reemplazar el tipo de datos Variante
El tipo de datos Variant es extremadamente flexible de usar, pero ocupa más memoria que otros tipos de datos. Cuando desee comprimir el exceso de espacio en su aplicación, debería considerar reemplazar las variables Variant con otros tipos de datos, especialmente reemplazando las matrices de variables Variant.
Cada Variante ocupa 16 bytes, mientras que Integer ocupa 2 bytes y Double ocupa 8 bytes. Las variables de cadena de longitud variable ocupan 4 bytes más 1 byte por cada carácter de la cadena. Sin embargo, cada Variante que contiene una cadena ocupa 16 bytes más 1 byte por cada carácter de la cadena. Debido a que son tan grandes, las variables variantes son particularmente molestas cuando se usan como variables locales o argumentos para procedimientos porque consumen espacio de pila demasiado rápido. Pero en algunos casos, el uso de otros tipos de datos en lugar de Variant reduce la flexibilidad y es necesario agregar más código para compensar la flexibilidad perdida. El resultado no es una reducción real de tamaño.
4. Utilice matrices dinámicas y recupere memoria al eliminar
Utilice matrices dinámicas en lugar de matrices fijas. Cuando los datos de la matriz dinámica ya no sean necesarios, utilice Erase o ReDimPReserve para descartar los datos innecesarios y recuperar la memoria utilizada por la matriz. Por ejemplo, utilice el siguiente código para recuperar el espacio utilizado por una matriz dinámica:
Aquí, Erase elimina completamente la matriz, mientras que ReDimPreserve solo acorta la matriz sin perder su contenido:
Eliminar una matriz de tamaño fijo no recupera el espacio ocupado por la matriz; simplemente borra el valor de cada elemento de la matriz. Si los elementos son cadenas o variantes que contienen cadenas o matrices, al eliminar la matriz se recupera la memoria ocupada por esas cadenas o variantes, no la memoria ocupada por la matriz en sí.
5. Recuperar espacio utilizado por variables de cadena u objeto
Cuando finaliza el proceso, el espacio utilizado por las cadenas locales (no estáticas) y las variables de matriz se puede recuperar automáticamente. Sin embargo, las variables de cadena y de matriz globales y de nivel de módulo sobreviven hasta el final de todo el programa. Si desea que su aplicación sea lo más pequeña posible, debe recuperar el espacio utilizado por estas variables tanto como sea posible. Asignar una cadena de longitud cero a una variable de cadena recupera su espacio:
Del mismo modo, establecer una variable de objeto en Nada recupera parte (pero no todo) del espacio utilizado por el objeto. Por ejemplo, para eliminar una variable de objeto Formulario:
Incluso si no utiliza variables de formulario explícitas, debe tener cuidado de descargar formularios que ya no se utilizan, en lugar de simplemente ocultarlos.
6. Eliminar el código muerto y las variables inútiles
A medida que desarrolla y modifica su aplicación, es posible que se quede con un código inactivo: un proceso completo en su código que no se llama en ninguna parte. También puede haber algunas variables no utilizadas declaradas. Aunque Visual Basic puede eliminar constantes inútiles al crear archivos .exe, no puede eliminar variables inútiles ni código inactivo. Tenga cuidado al revisar su código para encontrar y eliminar variables inútiles y código inactivo. Por ejemplo, la instrucción Debug.Print se ignora cuando se ejecuta .exe, pero suele aparecer en archivos .exe.
Al crear un archivo .exe, las declaraciones Debug.Print que contienen cadenas y variables como parámetros no se compilan. Pero para la declaración Debug.Print que contiene una función como parámetro, el compilador la ignora y la función se compila. Entonces, mientras la aplicación se está ejecutando, se llama a la función pero se ignora el valor de retorno. Porque en el archivo .exe, cuando la función aparece como un parámetro de Debug.Print, ocupará espacio y tiempo de ciclo de CPU, por lo que es mejor eliminar estas declaraciones antes de generar el archivo exe.
Utilice el comando Buscar en el menú Editar para buscar referencias a una variable específica. O cuando cada módulo contiene una declaración OptionExplicit, puede averiguar rápidamente si la variable se usa eliminando o comentando la declaración de la variable y ejecutando la aplicación. Si se utiliza esta variable, Visual Basic generará un error. Si no se produce ningún error, la variable no se utiliza. ->