Autor
|
Tema: [SRC] cConcatenator.cls (Leído 1,796 veces)
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
Mi nueva clase para concatenar cadenas rápidamente (no incluye la opción de insertar/remover cadenas por ahora...): Option Explicit Option Compare Binary '==================================== ' º Name : cConcatenator.cls ' º Version : 1.3 ' º Author : Psyke1 ' º Twitter : @SoyAbsurdo ' º Country : Spain ' º Date : 15/10/11 ' º Visit : ' * http://foro.h-sec.org ' * http://infrangelux.sytes.net '==================================== Private Declare Sub RtlMoveMemory Lib "ntdll.dll" (ByVal lpDestination As Long, ByVal lpSource As Long, ByVal Length As Long) Private Declare Function SysAllocStringByteLen Lib "oleaut32.dll" (ByVal oleStr As Long, ByVal BLen As Long) As Long Private sRet() As String Private lCount As Long Private lChunk As Long Private lTotalLenB As Long Public Static Sub Append(ByRef sText As String) Dim lLenB As Long lLenB = LenB(sText) If lLenB Then If lCount > lChunk Then lChunk = lChunk + lChunk + 1& ReDim Preserve sRet(lChunk) As String End If sRet(lCount) = sText lCount = lCount + 1& lTotalLenB = lTotalLenB + lLenB End If End Sub Public Static Property Get LengthString() As Long LengthString = LengthString \ 2& End Property Public Sub ResetAll() lCount = 0& lTotalLenB = 0& End Sub Public Static Property Get GetString() As String Dim pDest As Long Dim lLenBItem As Long Dim Q As Long If lCount Then RtlMoveMemory VarPtr(GetString), VarPtr(SysAllocStringByteLen(0&, lTotalLenB)), 4& pDest = StrPtr(GetString) For Q = 0 To (lCount - 1&) lLenBItem = LenB(sRet(Q)) RtlMoveMemory pDest, StrPtr(sRet(Q)), lLenBItem pDest = pDest + lLenBItem Next Q End If End Property Private Sub Class_Initialize() lChunk = &H270F& ReDim sRet(lChunk) As String End Sub
Test comparándola con cStringBuilderl.cls (la más rápida que encontré en la red): DoEvents!
|
|
« Última modificación: 15 Octubre 2011, 22:06 pm por Psyke1 »
|
En línea
|
|
|
|
$Edu$
Desconectado
Mensajes: 1.842
|
Porque siempre se toman tanta molestia en agarrar mas velocidad? se que un buen programador tendria que hacer lo mas rapido posible sus codigos, pero porque? antes hace muchos años, las primeras computadoras, ahi si te entenderia, pero ahora con las pcs que hay, crees que se nota la diferencia? Hablo solamente de las funciones que mejoran ustedes aca siempre, porque en otras cosas si que hay que hacerlo lo mas veloz posible.
|
|
|
En línea
|
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
En ocasiones las cosas se pueden hacer mejor... Si una cosa es optimizable no es trabajo a la basura. Supongamos que tienes que comprobar datos con una función 100.000 veces por ejemplo. La función A tarda en cada uno : 0,010 seg y la función B: 0,015 seg Tiempo tras la función A: 1000 seg Tiempo tras la función B: 1500 seg No sé tú, pero a mí si me importa esperar 500 segundos porque sí delante de la pantalla. DoEvents!
|
|
|
En línea
|
|
|
|
$Edu$
Desconectado
Mensajes: 1.842
|
Si puede ser, talvez porque no me ha tocado hacer bucles tan largos, pero algun dire: "Tenian razon" , saludos!
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
la clase esta mal... tiene varias fugas de memoria...
* Antes de hacer un AllocString se debe hacer un sysfreestring si lpString es distinto a cero. * Cuando se retorna la string concatenada se retorna una variable AUTOMATICA, lo cual si el puntero de la varible a retornar es la misma que lpString se realizarian 2 veces la destruccion de memoria... 1 por la clase y otra por la variable automatica y esto n deberia de ser... ** Suponiendo que se corrige el 1er punto, entonces al parecer se deberia de setear lpString igual a 0 como ultimo paso en AllocString.
A mi criterio NO es buena idea usar esas apis para esto debido a que vb6 no le da al programador tanta maniobrabilidad interna...
P.D.: Psyke1, ¿El proyecto ya se murio vdd?.
Dulces Lunas!¡.
|
|
« Última modificación: 11 Octubre 2011, 19:48 pm por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
Ook, gracias, lo corregí. Y no, no está acabado nuestro proyecto, ni mucho menos... DoEvents!
|
|
|
En línea
|
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
Encontré otra forma de hacerlo que me gusta más y es más sintética aunque menos completa en algunos aspectos... DoEvents!
|
|
|
En línea
|
|
|
|
|
|