elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 09:06  


Tema destacado: Recuperar cuenta de Google, GMail, Youtube

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo, raul338)
| | |-+  [SRC] cConcatenator.cls
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SRC] cConcatenator.cls  (Leído 461 veces)
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.005



Ver Perfil WWW
[SRC] cConcatenator.cls
« en: 11 Octubre 2011, 17:10 »

Mi nueva clase para concatenar cadenas rápidamente (no incluye la opción de insertar/remover cadenas por ahora...):
Código
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! :P


« Última modificación: 15 Octubre 2011, 22:06 por Psyke1 » En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.416



Ver Perfil
Re: [SRC] cConcatenator.cls
« Respuesta #1 en: 11 Octubre 2011, 17:19 »

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

"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas." - Albert Einstein.
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.005



Ver Perfil WWW
Re: [SRC] cConcatenator.cls
« Respuesta #2 en: 11 Octubre 2011, 17:41 »

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. :P

DoEvents! :P
En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.416



Ver Perfil
Re: [SRC] cConcatenator.cls
« Respuesta #3 en: 11 Octubre 2011, 18:12 »

Si puede ser, talvez porque no me ha tocado hacer bucles tan largos, pero algun dire: "Tenian razon" :P, saludos!
En línea

"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas." - Albert Einstein.
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.832


I'Love...!¡.


Ver Perfil WWW
Re: [SRC] cConcatenator.cls
« Respuesta #4 en: 11 Octubre 2011, 19:31 »

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 por BlackZeroX▓▓▒▒░░ » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.005



Ver Perfil WWW
Re: [SRC] cConcatenator.cls
« Respuesta #5 en: 11 Octubre 2011, 19:55 »

Ook, gracias, lo corregí.
Y no, no está acabado nuestro proyecto, ni mucho menos... :)

DoEvents! :P
En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.005



Ver Perfil WWW
Re: [SRC] cConcatenator.cls
« Respuesta #6 en: 12 Octubre 2011, 02:02 »

Encontré otra forma de hacerlo que me gusta más y es más sintética aunque menos completa en algunos aspectos... :P

DoEvents! :P
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines