My new class to concatenate strings fastly:
vb Code:
  1. Option Explicit
  2. '====================================
  3. ' Name      : cConcatenator.cls
  4. ' Version   : 1.0
  5. ' Author    : Psyke1
  6. ' Twitter   : @SoyAbsurdo
  7. ' Country   : Spain
  8. ' Date      : 10/10/11
  9. ' Reference : http://goo.gl/cylbd
  10. ' Dedicated : BlackZeroX & coco
  11. ' Visit     :
  12. '    * http://foro.h-sec.org
  13. '    * http://infrangelux.sytes.net
  14. '====================================
  15.  
  16. Private Declare Function SysAllocStringByteLen Lib "oleaut32.dll" (ByVal oleStr As Long, ByVal BLen As Long) As Long
  17. Private Declare Sub RtlMoveMemory Lib "ntdll.dll" (ByVal lpDestination As Long, ByVal lpSource As Long, ByVal Length As Long)
  18.  
  19. Private Const CHUNK_SIZE            As Long = &H4000
  20.  
  21. Private sRetStr                     As String
  22. Private lCountB                     As Long
  23. Private lSize                       As Long
  24.  
  25. '// Add a string fastly in the buffer, you can especify the position too.
  26. Friend Static Sub AddStr(ByRef sText As String, Optional ByVal lPosition As Long = 0)
  27. Dim lLenB                           As Long
  28. Dim lpStrPos                        As Long
  29. Dim lTmpC                           As Long
  30.  
  31.     lLenB = LenB(sText)
  32.     If lLenB Then
  33.         lTmpC = lCountB + lLenB
  34.  
  35.         If lTmpC > lSize Then
  36.             Do
  37.                 lSize = lSize + CHUNK_SIZE
  38.                 sRetStr = sRetStr & AllocString
  39.             Loop While lTmpC > lSize
  40.         End If
  41.        
  42.         If lPosition > 0 Then
  43.             lPosition = lPosition + lPosition
  44.            
  45.             If lPosition <= lCountB Then
  46.                 lpStrPos = StrPtr(sRetStr) + lPosition
  47.                
  48.                 RtlMoveMemory (lpStrPos + lLenB), lpStrPos, (lCountB - lPosition)
  49.                 RtlMoveMemory lpStrPos, StrPtr(sText), lLenB
  50.             End If
  51.         Else
  52.             RtlMoveMemory (StrPtr(sRetStr) + lCountB), StrPtr(sText), lLenB
  53.         End If
  54.        
  55.         lCountB = lTmpC
  56.     End If
  57. End Sub
  58.  
  59. '// It deletes a specific part of the buffer.
  60. Public Static Sub RemoveStr(ByVal lPosition As Long, ByVal lLength As Long)
  61. Dim lpStrPos                        As Long
  62.  
  63.     If lPosition > 0 Then
  64.         If lLength > 0 Then
  65.             lLength = lLength + lLength
  66.             lPosition = lPosition + lPosition
  67.            
  68.             If lPosition + lLength <= lCountB Then
  69.                 lCountB = lCountB - lLength
  70.                 lpStrPos = StrPtr(sRetStr) + lPosition
  71.                
  72.                 RtlMoveMemory lpStrPos, (lpStrPos + lLength), lCountB
  73.             ElseIf (lPosition = 2) And (lLength = lCountB) Then
  74.                 ResetAll
  75.             End If
  76.         End If
  77.     End If
  78. End Sub
  79.  
  80. '// Reset all values.
  81. Friend Sub ResetAll()
  82.     lCountB = 0
  83.     lSize = CHUNK_SIZE
  84.     sRetStr = AllocString
  85. End Sub
  86.  
  87. Private Function AllocString() As String
  88.     RtlMoveMemory VarPtr(AllocString), VarPtr(SysAllocStringByteLen(0&, CHUNK_SIZE)), 4&
  89. End Function
  90.  
  91. '// Get the string of the buffer.
  92. Friend Property Get GetString() As String
  93.     If lCountB Then
  94.         GetString = LeftB$(sRetStr, lCountB)
  95.     End If
  96. End Property
  97.  
  98. '// Return the length in Bytes.
  99. Friend Static Property Get LengthB() As Long
  100.     LengthB = lCountB
  101. End Property
  102.  
  103. '// Return the length.
  104. Friend Static Property Get Length() As Long
  105.     Length = lCountB \ 2
  106. End Property
  107.  
  108. '// Return the size of the buffer in bytes.
  109. Friend Static Property Get CapacityB() As Long
  110.     CapacityB = lSize
  111. End Property
  112.  
  113. '// Return the size of the buffer.
  114. Friend Static Property Get Capacity() As Long
  115.     Capacity = lSize \ 2
  116. End Property
  117.  
  118. Private Sub Class_Initialize()
  119.     ResetAll
  120. End Sub

Tests comparing with cStringBuilderl.cls (the faster than i found) and "&" operator of vb:
Code:
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Form_Load()
Const LOOPS * * * * As Long = 5000
Const sTest * * * * As String = "http://foro.h-sec.org/index.php/board,19.0.html"
Dim cConc * * * * * As New cConcatenator
Dim cSBldr * * * * *As New cStringBuilder
Dim t * * * * * * * As New CTiming
Dim x * * * * * * * As Long
Dim s * * * * * * * As String

 * *Me.AutoRedraw = True
 * *Me.Print "Test adding string"; LOOPS; "times:"
 * *
 * *t.Reset
 * *For x = 1 To LOOPS
 * * * *s = s & sTest
 * *Next
 * *Me.Print "& Operator - ", , t.sElapsed
 * *Sleep 100
 * *
 * *t.Reset
 * *For x = 1 To LOOPS
 * * * *cSBldr.Append sTest
 * *Next
 * *Me.Print "cStringBuilder - ", t.sElapsed
 * *Sleep 100
 * *
 * *t.Reset
 * *For x = 1 To LOOPS
 * * * *cConc.AddStr sTest
 * *Next
 * *Me.Print "cConcatenator - ", t.sElapsed

Set cConc = Nothing
Set t = Nothing
Set cSBldr = Nothing
End Sub
Result:


Hope you like it!