Strings schnell aneinanderhängen

Ich komme aus der Java-Welt und dort hieß es immer, wenn man mehrere Strings aneinander hängen will, muss man StringBuffer/StringBuilder benutzen. Ich habe dies jetzt mal in .Net untersucht und musste feststellen, dass es etwas mehr ist.

In .Net habe ich jetzt einige Optimierungen getestet und mit dem IL-Disassembler angesehen. Und es kam heraus, dass der folgende Ausdruck am schnellsten ist. Außerdem ist er lesbarer als eine vergleichbare Version mit einem StringBuilder.

Dim strHallo as String = "Hallo"
Dim strResult as String

strResult = "<" & strHallo & ">"

Der Compiler optimiert diesen Code, sodass die Funktion String.Concat() aufgerufen wird.  Dabei werden die passenden Überladungen aufgerufen. Bis zu 4 Argumente als Strings. Darüber hinaus wird ein String-Array erstellt, gefüllt und übergeben. Ein weiterer positiver Effekt ist, dass bekannte Strings die verbunden werden sollen, bereits vom Compiler zusammengefügt werden.

Der folgende Code wird allerdings nicht optimal ausgeführt, da auch dieser Code auf String.Concat() für 2 Strings zurückgeführt wird. Der Code benötigte bei mir auf meinem Laptop ca. 17 Sekunden.

Dim strResult As String = ""
For i As Integer = 0 To 100000
    strResult &= "<"
Next i

Der nachfolgende Code mit einem StringBuilder benötigte weniger als 10 Millisekunden und ist auch verständlich.

Dim strResult As String = ""
Dim sb As New StringBuilder()

For i As Integer = 0 To 100000
    sb.Append("<")
Next i

strResult = sb.ToString()

Fassen wir das Ganze zusammen:

  • Soll eine feste Zahl an Strings aneinander gehangen werden, dann kann man den &-Operator benutzen.
  • Konstante Strings werden vom Compiler zusammengefügt.
  • Soll ein String mit einer Schleife zusammengebaut werden, so empfiehlt sich die Benutzung eines StringBuilder!