Red de conocimiento informático - Conocimiento informático - Cómo escribir código VB de alta calidad

Cómo escribir código VB de alta calidad

1. Utilice números enteros (Integer) y enteros largos (Long)

La forma más sencilla de mejorar la velocidad del código es utilizar el tipo de datos correcto. Puede que no lo creas, pero elegir el tipo de datos correcto puede mejorar enormemente el rendimiento de tu código. En la mayoría de los casos, los programadores pueden reemplazar las variables de tipo simple, doble y moneda con variables de tipo entero o largo, porque la capacidad de VB para manejar enteros y largos es mucho mayor que la de otros tipos de datos.

En la mayoría de los casos, la razón por la que los programadores eligen usar Single o Double es por su capacidad para guardar decimales. Pero los decimales también se pueden almacenar en variables de tipo Integer. Por ejemplo, si hay tres decimales acordados en el programa, entonces solo necesita dividir el valor almacenado en la variable Entero por 1000 para obtener el resultado. En mi experiencia, el código puede ejecutarse casi 10 veces más rápido usando Integer y Long en lugar de Single, Double y Currency.

2. Evite el uso de variantes

Para un programador de VB, esto es algo obvio. Las variables de tipos variantes requieren 16 bytes de espacio para almacenar datos, mientras que un número entero (Entero) solo requiere 2 bytes. Por lo general, el propósito de usar tipos variantes es reducir la carga de trabajo de diseño y la cantidad de código. Algunos programadores también lo usan para evitar problemas. Pero si un software está estrictamente diseñado y codificado según las especificaciones, se puede evitar por completo el uso de tipos variantes.

Por cierto, el mismo problema también existe para los objetos Object. Mire el siguiente código:

Dim FSO

Establecer FSO = New Scripting.FileSystemObject

o

Dim FSO como objeto

p>

Establecer FSO = New Scripting.FileSystemObject

El código anterior desperdiciará memoria y tiempo de CPU durante la asignación porque el tipo de datos no se especifica al declarar. El código correcto debería verse así:

Dim FSO as New FileSystemObject

3. Intente evitar el uso de atributos

En el código diario, la comparación más común. El código ineficiente ocurre cuando una propiedad se puede usar repetidamente, especialmente dentro de un bucle. Debes saber que la velocidad de acceso a las variables es aproximadamente 20 veces mayor que la de acceso a los atributos. Muchos programadores utilizan el siguiente código en sus programas:

Dim intCon as Integer

For intCon = 0 to Ubound(SomVar())

Text1. Text = Text1.Text & vbcrlf & SomeVar(intCon)

Siguiente intCon

La velocidad de ejecución del siguiente código es 20 veces mayor que la del código anterior.

Atenuar intCon como entero

Atenuar sOutput como cadena

Para intCon = 0 a Ubound(SomeVar())

sOutput = sOutput & vbCrlf &

SomeVar(intCon)

Siguiente

Text1.Text = sOutput

4. sets

A menos que debas usar una Colección, deberías intentar usar una matriz. Según las pruebas, la velocidad de acceso de las matrices puede alcanzar 100 veces la de las colecciones. Este número suena un poco impactante, pero si consideras que una colección es un objeto, entenderás por qué la diferencia es tan grande.

5. Expanda los cuerpos de bucle pequeños

Al codificar, puede encontrarse con esta situación: un cuerpo de bucle solo se repetirá de 2 a 3 veces y el cuerpo del bucle consta de varias líneas. de código. En este caso, puedes desenrollar el bucle. La razón es que el bucle consume tiempo adicional de CPU. Pero si el bucle es más complejo, no es necesario hacer esto.

6. Evite el uso de funciones muy cortas

De manera similar al uso de bucles pequeños, no es económico llamar a funciones con solo unas pocas líneas de código: el tiempo dedicado a llamar a la función puede ser excesivo. tarda más en ejecutarse que el código de la función. En este caso, puede copiar el código de la función al lugar donde se llamó originalmente la función.

7. Reducir las referencias a subobjetos

En VB, las referencias a objetos se logran utilizando . Por ejemplo:

Form1.Text1.Text

En el ejemplo anterior, el programa hace referencia a dos objetos: Form1 y Text1. Cotizar utilizando este método es ineficaz. Pero lamentablemente no hay forma de evitarlo. Lo único que puede hacer el programador es usar With o guardar el objeto hijo (Texto1) con otro objeto.

Nota: Usar con

Con frmMain.Text1

.Text = "Learn VB"

.Alignment = 0

.Tag = "Es mi vida"

.BackColor = vbBlack

.ForeColor = vbWhite

Fin con

O

Nota: Utilice otro objeto para guardar el subobjeto

Atenuar txtTextBox como TextBox

Establecer txtTextBox = frmMain.Text1

TxtTextBox.Text = "Aprende VB"

TxtTextBox.Alignment = 0

TxtTextBox.Tag = "Es mi vida"

TxtTextBox.BackColor = vbBlack

TxtTextBox.ForeColor = vbWhite Tenga en cuenta que el método mencionado anteriormente solo es aplicable cuando necesita operar en subobjetos de un objeto. El siguiente código es incorrecto:

Con Texto1

.Text = "Aprende VB"

.Alignment = 0

.Tag = "Es mi vida"

.BackColor = vbBlack< / p>

.ForeColor = vbWhite

End With

Desafortunadamente, a menudo podemos encontrar código similar al anterior en el código real. Hacerlo sólo hará que el código se ejecute más lentamente. La razón es que el bloque With formará una rama después de la compilación, lo que agregará trabajo de procesamiento adicional.

8. Comprobar si una cadena está vacía

La mayoría de los programadores utilizan el siguiente método para comprobar si una cadena está vacía:

Si Texto1. entonces

Comentario: Realizar la operación

Finalizar si

Desafortunadamente, hacer una comparación de cadenas requiere incluso más procesamiento que leer el atributo grande. Por lo tanto te sugiero que utilices el siguiente método:

Si Len(Text1.Text) = 0 entonces

Nota: Ejecutar la operación

Finalizar si

9. Elimine el nombre de la variable después de la palabra clave Siguiente

Agregar el nombre de la variable después de la palabra clave Siguiente hará que la eficiencia del código disminuya. No sé por qué sucede esto, es sólo una experiencia. Pero creo que pocos programadores irían tan lejos como para agregar información superflua. Después de todo, la mayoría de los programadores son personas que aprecian las palabras como el oro.

Comentario: Código incorrecto

Para iCount = 1 a 10

Comentario: Realizar operación

Siguiente iCount

Comentario: Código correcto

Para iCount = 1 a 10

Comentario: Realizar la operación

Siguiente

Usando matrices, en su lugar. de múltiples variables

Cuando tienes múltiples variables que almacenan datos similares, puedes considerar reemplazarlas con una matriz. En VB, las matrices son una de las estructuras de datos más eficientes.

11. Utilice matrices dinámicas en lugar de matrices estáticas

El uso de matrices dinámicas no tendrá un gran impacto en la velocidad de ejecución del código, pero en algunos casos puede ahorrar mucho tiempo. tiempo.

12. Destruir objetos

No importa qué software esté escrito, los programadores deben considerar liberar el espacio de memoria ocupado por el software después de que el usuario decide finalizarlo. Pero desafortunadamente, a muchos programadores no parece importarles mucho esto. El enfoque correcto es destruir los objetos utilizados en el programa antes de salir del programa. Por ejemplo:

Atenuar FSO como nuevo objeto de sistema de archivos

' Realizar operación

' Destruir objeto

Establecer FSO = Nada

Para formularios, puede descargar:

Descargar frmMain

o

Establecer frmMain = Nothing

13. Cadenas de longitud fija

Técnicamente hablando, las cadenas de longitud fija requieren menos tiempo y espacio de procesamiento que las cadenas de longitud variable. Sin embargo, la desventaja de las cadenas de longitud fija es que, en muchos casos, es necesario llamar a la función Trim para eliminar el carácter nulo al final de la cadena, lo que reducirá la eficiencia del código. Entonces, a menos que la longitud de la cadena no cambie, use cadenas de longitud variable.

14. Utilice módulos de clase en lugar de controles ActiveX

A menos que los controles ActiveX impliquen interfaces de usuario, intente utilizar objetos ligeros como clases. Hay una gran diferencia en eficiencia entre los dos.

15. Utilice objetos internos

Cuando se trata de utilizar controles ActiveX y DLL, a muchos programadores les gusta compilarlos y luego agregarlos al proyecto. Le recomiendo que no haga esto porque conectarse a un objeto externo desde VB requiere mucha potencia de procesamiento de la CPU. Cada vez que llamas a un método o accedes a una propiedad, desperdicias muchos recursos del sistema. Si tiene el código fuente de un control ActiveX o DLL, conviértalos en objetos privados en el proyecto.

16. Reducir el número de módulos

A algunas personas les gusta guardar funciones comunes en módulos, y yo estoy de acuerdo con esto. Pero escribir sólo veinte o treinta líneas de código en un módulo es un poco ridículo. Si realmente no necesita un módulo, intente no usarlo. La razón de esto es que VB carga módulos en la memoria solo cuando se llaman funciones o variables en el módulo; estos módulos se descargan de la memoria cuando se cierra la aplicación VB. Si solo hay un módulo en el código, VB solo realizará una operación de carga, por lo que mejorará la eficiencia del código; por el contrario, si hay varios módulos en el código, VB realizará múltiples operaciones de carga y la eficiencia de; el código se reducirá.

17. Utilice matrices de objetos

Al diseñar interfaces de usuario, los programadores deben intentar utilizar matrices de objetos para el mismo tipo de controles. Puedes hacer un experimento: agrega 100 PictureBoxes a la ventana, cada uno con un nombre diferente, y ejecuta el programa. Luego cree un nuevo proyecto, agregue también 100 PictureBoxes a la ventana, pero esta vez use una matriz de objetos, ejecute el programa, puede notar la diferencia en el tiempo de carga de los dos programas.

18. Utilice el método Mover

Al cambiar la posición de un objeto, a algunos programadores les gusta usar las propiedades Ancho, Alto, Superior e Izquierdo.

Por ejemplo:

Imagen1.Width = 100

Imagen1.Height = 100

Imagen1.Top = 0

Imagen1.Left = 0

De hecho, esto es muy ineficiente, porque el programa modifica cuatro propiedades y, después de cada modificación, la ventana se volverá a dibujar. El enfoque correcto es utilizar el método Mover:

Imagen1.Move 0,0,100,100

19. Reducir el uso de imágenes

Las imágenes ocuparán mucho. de memoria y procesamiento de imágenes. También requiere muchos recursos de CPU. En el software, si es posible, considere usar colores de fondo en lugar de imágenes; por supuesto, esta es solo la perspectiva de un técnico sobre este tema.

20. Utilice ActiveX DLL en lugar de control ActiveX

Si el objeto ActiveX que diseña no incluye una interfaz de usuario, utilice ActiveX DLL.

Optimización de compilación

Muchos programadores de VB que he conocido nunca han usado opciones de compilación ni han intentado comprender las diferencias entre las distintas opciones. Echemos un vistazo al significado específico de cada opción.

1. Código P (pseudocódigo) y código nativo

Puede optar por compilar el software en código P o código nativo. La opción predeterminada es el código nativo. Entonces, ¿qué son el código P y el código nativo?

Código P: al ejecutar código en VB, VB primero compila el código en código P y luego interpreta y ejecuta el código P compilado. En un entorno compilado, usar este código es más rápido que el código nativo. Después de seleccionar P-Code, VB coloca el pseudocódigo en un archivo EXE al compilar.

Código nativo: El código nativo es una opción introducida sólo después de VB6. Cuando se compila en un archivo EXE, el código nativo se ejecuta más rápido que el código P. Después de seleccionar el código nativo, VB utiliza instrucciones de la máquina para generar un archivo EXE al compilar.

Al compilar con código nativo, encontré que a veces se introducían algunos errores inexplicables. Mi código se ejecuta completamente correctamente en el entorno de compilación, pero el archivo EXE generado con la opción de código nativo no se ejecuta correctamente. Por lo general, esto sucede cuando se descarga una ventana o aparece una ventana de impresión. Resolví este problema agregando una declaración DoEvent al código. Por supuesto, la posibilidad de que esto suceda es muy rara. Quizás algunos programadores de VB nunca lo hayan encontrado, pero existe.

Hay varias opciones en el código nativo:

a) Optimización de la velocidad del código: Esta opción puede compilar un archivo ejecutable más rápido, pero el archivo ejecutable es más grande. Recomendado

b) Optimización del tamaño del código: esta opción puede compilar un archivo ejecutable más pequeño, pero a expensas de la velocidad, no se recomienda.

c) Sin optimización: esta opción simplemente convierte el código P en código nativo sin ninguna optimización. Se puede utilizar al depurar código.

d) Optimizar para Pentium Pro: Aunque esta no es la opción predeterminada en el código nativo, suelo utilizar esta opción. El programa ejecutable compilado con esta opción puede ejecutarse más rápido en máquinas Pentium Pro y Pentium 2 o superior, pero será un poco más lento en máquinas más antiguas. Teniendo en cuenta que el uso de Pentium 2 ya está desactualizado, se recomienda que todos utilicen esta opción.

e) Generar información de depuración simbólica: este elemento genera cierta información de depuración durante el proceso de compilación, lo que permite a los usuarios utilizar herramientas como Visual C++ para depurar el código compilado. El uso de esta opción genera un archivo .pdf que registra la información de la bandera en el archivo ejecutable. Esta opción es útil cuando el programa tiene funciones API o llamadas DLL.

2. Optimización Avanzada

Las configuraciones en Optimización Avanzada pueden ayudarte a mejorar la velocidad del software, pero a veces también pueden introducir algunos errores, por lo que te recomiendo que las uses como tal. con el mayor cuidado posible. Si hay cuerpos de bucle relativamente grandes u operaciones matemáticas complejas en el código, seleccionar ciertos elementos en la optimización avanzada mejorará en gran medida el rendimiento del código. Si utiliza funciones de optimización avanzadas, le recomiendo probar rigurosamente los archivos compilados.

a) No asumir ningún alias: esto puede mejorar la eficiencia de ejecución del código en el cuerpo del bucle, pero si el valor de la variable se cambia a través de una referencia de variable, como llamar a un método, se utiliza la referencia de variable. como parámetro del método, si el valor de una variable se cambia en un método, se producirá un error. Puede ser simplemente que el resultado devuelto sea incorrecto o puede ser un error grave que haga que el programa se interrumpa.

b) Cancelar la verificación de enlace de matriz, cancelar la verificación de desbordamiento de enteros y cancelar la verificación de errores de punto flotante: cuando el programa se está ejecutando, si se encuentran errores a través de estas comprobaciones, el código de manejo de errores manejará estos errores. Pero si se cancelan estas comprobaciones, el programa no podrá manejar un error. Debe utilizar estas opciones sólo si está seguro de que los errores anteriores no se producirán en su código. Mejorarán enormemente el rendimiento del software.

c) Permitir operaciones de punto flotante sin redondeo: Seleccionar esta opción permite que el programa compilado procese operaciones de punto flotante más rápido. Su única desventaja es que puede generar resultados incorrectos al comparar dos números de coma flotante.

d) Cancelar la comprobación de seguridad de Pentium FDIV: esta opción está configurada para algunos chips Pentium antiguos y ahora parece estar desactualizada.