[VB6] Trabajar con cadenas (español)
Cuando se trabaja con cadenas es usual encontrar segmentos como este:
VB6:
Dim str As String
str = "Select * from "
str = str & " Table1 where"
str = str & " Table1.Id=" & MyId
Bueno, en este caso, cada operación (la unión de cadenas) realiza por lo menos dos tareas antes de regresar la nueva cadena unida:
- primero un espacio en la ram es reservada para la nueva cadena (del tamaño de la cadena 1 mas la cadena 2)
- luego, la unión de cadenas es realizada (cada caracter de cada cadena es copiado al nuevo espacio en la ram)
y finalmente, el puntero a esa nueva posición de memoria es retornado.
En java puedes utilizar la clase StringBuffer, esta clase realiza las tareas con cadenas de forma más eficiente que el ejemplo anterior, en el framework de .NET puedes utilizar la clase StringBuilder de forma equivalente.
Pero que ocurre en VB6, ésto es lo que puedes hacer:
'Inicio de la clase
Private grupo() As String
Private lngElementos As Long
Public Sub Agregar(ByVal str As String)
ReDim Preserve grupo(lngItems) As String
grupo(lngElementos) = str
lngElementos = lngElementos + 1
End Sub
Public Function toString() As String
If lngElementos > 0 Then toString = Join(grupo, "")
End Function
'Fin de la clase
Join es una función del API de VB6 que realiza la unión de posiciones de memoria en una sola posición de forma realmente rápida, de forma que puedes ahorrar algo de tiempo en tus operaciones.
También he escuchado algunos consejos, como que es más eficiente comparar:
If MiCadena = vbNullString Then ...
que comparar:
If MiCadena = "" Then ...
Si realizas comparaciones como esas dentro de un bucle, entonces seguir este consejo puede ayudarte. Enhorabuena.


2 Comments:
hola sería igual de eficiente hacer esto:
str="Cadena cadena " & _
"cadena cadena cadena " & _
"cadena cadena"
Hola,
Bueno, no realmente, en el tema me refiero a uso de concatenaciones dentro de un bucle (es decir, continuas repeticiones y ejecucion de un bloque de codigo), dentro de un bucle el performance de la concatenacion simple, contra el uso de un objeto que maneja una cadena dinamicamente es muy diferente, siendo el segundo muy superior al primero.
Post a Comment
<< Home