elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [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 1,774 veces)
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



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

Mi nueva clase para concatenar cadenas rápidamente (no incluye la opción de insertar/remover cadenas por ahora...):
Código
  1. Option Explicit
  2. Option Compare Binary
  3. '====================================
  4. ' º Name      : cConcatenator.cls
  5. ' º Version   : 1.3
  6. ' º Author    : Psyke1
  7. ' º Twitter   : @SoyAbsurdo
  8. ' º Country   : Spain
  9. ' º Date      : 15/10/11
  10. ' º Visit     :
  11. '    * http://foro.h-sec.org
  12. '    * http://infrangelux.sytes.net
  13. '====================================
  14. Private Declare Sub RtlMoveMemory Lib "ntdll.dll" (ByVal lpDestination As Long, ByVal lpSource As Long, ByVal Length As Long)
  15. Private Declare Function SysAllocStringByteLen Lib "oleaut32.dll" (ByVal oleStr As Long, ByVal BLen As Long) As Long
  16.  
  17. Private sRet()                  As String
  18. Private lCount                  As Long
  19. Private lChunk                  As Long
  20. Private lTotalLenB              As Long
  21.  
  22. Public Static Sub Append(ByRef sText As String)
  23. Dim lLenB                       As Long
  24.  
  25.    lLenB = LenB(sText)
  26.    If lLenB Then
  27.        If lCount > lChunk Then
  28.            lChunk = lChunk + lChunk + 1&
  29.            ReDim Preserve sRet(lChunk) As String
  30.        End If
  31.  
  32.        sRet(lCount) = sText
  33.        lCount = lCount + 1&
  34.        lTotalLenB = lTotalLenB + lLenB
  35.    End If
  36. End Sub
  37.  
  38. Public Static Property Get LengthString() As Long
  39.    LengthString = LengthString \ 2&
  40. End Property
  41.  
  42. Public Sub ResetAll()
  43.    lCount = 0&
  44.    lTotalLenB = 0&
  45. End Sub
  46.  
  47. Public Static Property Get GetString() As String
  48. Dim pDest                       As Long
  49. Dim lLenBItem                   As Long
  50. Dim Q                           As Long
  51.  
  52.    If lCount Then
  53.        RtlMoveMemory VarPtr(GetString), VarPtr(SysAllocStringByteLen(0&, lTotalLenB)), 4&
  54.  
  55.        pDest = StrPtr(GetString)
  56.        For Q = 0 To (lCount - 1&)
  57.            lLenBItem = LenB(sRet(Q))
  58.            RtlMoveMemory pDest, StrPtr(sRet(Q)), lLenBItem
  59.            pDest = pDest + lLenBItem
  60.        Next Q
  61.    End If
  62. End Property
  63.  
  64. Private Sub Class_Initialize()
  65.    lChunk = &H270F&
  66.    ReDim sRet(lChunk) As String
  67. End Sub
  68.  

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 pm por Psyke1 » En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



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

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 Desconectado

Mensajes: 1.089



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

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



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

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

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


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

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 Desconectado

Mensajes: 1.089



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

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



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

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:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines