Kontakt
DSVGO
Historie | |
19.12.2000 | Durch Nutzung von MidB$ und LeftB$ konnte der Code nochmal deutlich beschleunigt werden |
27.11.2000 | Code-Abschnitt für Buffer-Vergrößerung korrigiert (bisher wurden dabei die bereits angefügten Strings "vergessen") |
03.11.2000 | Erste Version |
Dim i As Long Dim s As String For i = 1 To 10000 s = s & "x" Next i Print sDas Erzeugen von 10.000 neuen Strings fordert VB sehr stark: auf meinem Rechner (bei voll optimierender Kompilierung) dauert dies 294ms.
Dim i As Long Dim cc As Concat Set cc = New Concat For i = 1 To 10000 cc.Concat "x" Next i Print cc.ValueDie Ausführung dieses Codes dauert bei mir nur 8ms. Die Concat-Klasse arbeitet also weit über 30-mal schneller als der &-Operator von VB.
Option Explicit Private Buffer As String Private BufferLen As Long Private Pointer As Long 'Auf "Leerstring" setzen: Public Sub Clear() Pointer = 1 End Sub 'String anhängen: Public Sub Concat(ByRef Value As String) Dim PointerNew As Long 'Benötigten Buffer berechnen: PointerNew = Pointer + LenB(Value) 'Ggf. Buffer vergößern: If PointerNew > BufferLen Then Buffer = Buffer & Space$(PointerNew) BufferLen = LenB(Buffer) End If 'String passend kopieren: MidB$(Buffer, Pointer) = Value Pointer = PointerNew End Sub 'Länge des internen Strings: Public Property Get Length() As Long Length = Pointer \ 2 End Property 'Inhalt des internen Strings: Public Property Get Value() As String Value = LeftB$(Buffer, Pointer - 1) End Property 'Neues Objekt initialisieren: Private Sub Class_Initialize() Clear End Sub
© Jost Schwider, 03.11.2000-19.12.2000 - http://vb-tec.de/concat.htm