Strings (String) in Visual Basic .NET sind unveränderlich (immutable). Jede Operation, wie z.B. die Verkettung, führt zur Erstellung eines neuen Strings anstelle einer Änderung des bestehenden. Bei einer großen Anzahl von Verketten/Änderungen führt dies zu merklichen Leistungsverlusten und erhöhtem Speicherverbrauch.
Für die Arbeit mit großen Textmengen wird empfohlen, spezielle Klassen zu verwenden, um Strings effizient zu manipulieren. In Visual Basic .NET ist dies System.Text.StringBuilder, der es ermöglicht, den String-Puffer zu ändern, ohne ständig neuen Speicher zuzuweisen.
Beispiel mit StringBuilder:
Imports System.Text Dim builder As New StringBuilder() For i As Integer = 1 To 100000 builder.Append("String " & i & vbCrLf) Next Dim result As String = builder.ToString()
Frage: „Kann man bei der Arbeit mit großen Textdateien einfach Strings mit dem Operator & zusammenfügen und sich keine Gedanken über die Leistung machen?“
Antwort: Nein. Wenn Sie im Loop Strings mit & zusammenfügen, wird für jede Iteration ein neues String-Objekt erstellt, und alle seine Zeichen werden zusätzlich kopiert. Das ist ineffizient bei großen Datenmengen. Es ist besser, StringBuilder zu verwenden.
Beispiel:
' Dieser Code ist bei großen N sehr langsam: Dim s As String = "" For i = 1 To 1000000 s = s & "a" Next ' Und dieser ist viel schneller: Dim sb As New StringBuilder() For i = 1 To 1000000 sb.Append("a") Next Dim s = sb.ToString()
Geschichte:
In einer Webanwendung sammelte das Projekt E-Mail-Newsletter durch einfache Verkettung von Strings in einer Schleife mit
&. Bei einer Menge von über 10.000 Nachrichten begann das System zu "hängen" und fiel aufgrund von Speicherauslastung aus. Nach dem Wechsel zu StringBuilder verschwanden diese Probleme.
Geschichte:
In der Fehlerprotokollierungsprozedur wurde das Protokoll durch mehrmaliges Hinzufügen von Strings durch einfache Addition erstellt. Dies erhöhte erheblich die Protokollschreibzeit und verlangsamte die gesamte Parserarbeit. Nach einer Überprüfung und Refaktorierung unter Verwendung von StringBuilder stieg die Verarbeitungszeit auf das Fünffache.
Geschichte:
Bei der Erstellung von Berichten in beliebten XLS-Dateien wählte der Analyst den einfachen Ansatz, alle Werte in einen String mit & zu verbinden. Ergebnis: Beim Generieren eines Berichts mit 10.000 Zeilen hörte die Anwendung auf zu reagieren. Der Austausch gegen StringBuilder löste das Problem der Leistung und des Speicherlecks.