2011-04-27 8 views
8

En pre.NET Visual Basic, un programador podría declarar que una cadena tiene un ancho determinado. Por ejemplo, sé que un número de seguridad social (en los EE. UU.) Siempre tiene once caracteres. Por lo tanto, puedo declarar una cadena que podría almacenar números de la seguridad social como una cadena de once personaje como este:VB6 - ¿Se obtiene algún beneficio de rendimiento al usar cadenas de ancho fijo en VB6?

Dim SSN As String * 11 

Mi pregunta es: ¿esto crea ningún tipo de beneficio en el rendimiento que ya sea que el código se ejecute más rápido o tal vez usar menos memoria? Además, ¿se asignaría una cadena de longitud fija en la memoria de manera diferente (, es decir,: en la pila en lugar de en el montón)?

+1

Use esa función para la validación de datos, no la optimización del rendimiento. – JohnFx

+2

Decidí hacer algunas evaluaciones comparativas. Descubrí que el uso de cadenas de ancho fijo en mi código en realidad conducía a un ** rendimiento ** de quince por ciento de rendimiento, es decir, tardaba un quince por ciento más en ejecutarse en promedio. Todavía no pude encontrar una manera de determinar si la variable está asignada en la pila o en el montón, y no sé cómo hacerlo en VB6. En cuanto a la validación de datos, parece una mala forma de validación. Quizás pueda entender por qué esta característica fue eliminada de VB.NET. –

+0

Gran pregunta; gran comentario, Daniel! – CaBieberach

Respuesta

4

La única vez en VB6 o antes de que tuviera que utilizar cadenas de longitud fija fue con el trabajo con llamadas API. No pasar una cadena de longitud fija causaría errores inexplicables en los momentos en que la longitud era más larga de lo esperado, e incluso a veces cuando era más corta de lo esperado.

Si está revisando y planificando cambiar eso en la aplicación, asegúrese de que no se transfieren las cadenas a una API o DLL externa, y que el programa no requiere campos de longitud fija, como por ejemplo muchos programas de importación AS/400.

Personalmente, nunca llegué a ver una diferencia de rendimiento ya que estaba ejecutando bucles de más de 300k registros, pero no tuve más remedio que proporcionar y trabajar con longitudes fijas cuando lo hice. Sin embargo, a VB le gusta usar longitudes indefinidas por defecto, así que me imagino que el rendimiento sería menor para la longitud fija.

Trate de escribir una aplicación de prueba para realizar una concatenación básica de dos cadenas, y la tengan en bucle sobre la función como 50k veces. Tiempo la diferencia entre los dos de tener una longitud indefinida y la otra fija.

+0

Otra razón por la que se han utilizado cadenas de longitud fija es cuando se leen y escriben registros de longitud fija en un archivo. p.ej. Una variedad de tipos. –

5

actualización:

No, no hay ninguna ventaja de rendimiento; PERO incluso si hubiera un beneficio de rendimiento, es una micro-optimización (a menos que llamara muchas (digamos millones) veces en un bucle)

Además, las cadenas de longitud fija generalmente ocupan más memoria que las de longitud variable si no está usando toda la longitud (a menos que sea muy corta).

Como siempre, debe comparar cuidadosamente antes de hacer que el código sea más difícil de mantener.

cadenas de longitud fija se ven generalmente en la interacción con algunas API COM, o cuando se modela a las limitaciones de dominio (como el ejemplo que diste de un SSN)