Monday, August 21, 2006

[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.

5 Comments:

At 12:33 PM, Anonymous Anonymous said...

hola sería igual de eficiente hacer esto:

str="Cadena cadena " & _
"cadena cadena cadena " & _
"cadena cadena"

 
At 4:31 PM, Blogger Cesar Cayetano said...

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.

 
At 5:25 PM, Anonymous Anonymous said...

This comment has been removed by a blog administrator.

 
At 11:31 PM, Anonymous Anonymous said...

Hello,
I have developed a new clean web 2.0 wordpress theme.

Has 2 colours silver and blue, has custom header(colour or image).
I am curently working on it, so if you have suggestions let me know.

You can view live demo and download from here www.getbelle.com
If you found bug reports or you have suggestions pm me.
Wish you a happing using.

many thanks to [url=http://www.usainstantpayday.com/]USAInstantPayDay.com[/url] for paying the hosting and developement of the theme

Treaskapame

 
At 1:23 AM, Anonymous Anonymous said...

if you guys craving straits to rely upon [url=http://www.generic4you.com]viagra[/url] online you can do it at www.generic4you.com, the most trusted viagra pharmacopoeia additionally of generic drugs.
you can invite up drugs like [url=http://www.generic4you.com/Sildenafil_Citrate_Viagra-p2.html]viagra[/url], [url=http://www.generic4you.com/Tadalafil-p1.html]cialis[/url], [url=http://www.generic4you.com/VardenafilLevitra-p3.html]levitra[/url] and more at www.rxpillsmd.net, the key [url=http://www.rxpillsmd.net]viagra[/url] fountain-head on the web. well another great [url=http://www.i-buy-viagra.com]viagra[/url] pharmacy you can find at www.i-buy-viagra.com

 

Post a Comment

<< Home