Kapazität repräsentiert den zusammenhängenden Speicher, der dem StringBuilder zugewiesen ist. Kapazität kann> = Länge der Zeichenfolge sein. Wenn mehr Daten an den StringBuilder als die Kapazität angehängt werden, erhöht StringBuilder automatisch die Kapazität. Da die Kapazität überschritten wurde (dh der zusammenhängende Speicher ist voll und es ist kein Pufferspeicher mehr verfügbar), wird ein größerer Pufferbereich zugewiesen, und Daten werden vom ursprünglichen Speicher in diesen neuen Bereich kopiert.
Es werden keine Daten in eine neue 'Instanz' kopiert, sondern in einen neuen 'Speicherort'. Die Instanz bleibt gleich, zeigt aber auf den neuen Speicherort.
bearbeiten FYI: Standardkapazität von String wenn nicht bei der Erstellung angegeben ist 16
Wenn Sie möchten, die Speicherplätze für String sehen, dann können Sie Ihre Anwendungen debuggen und überprüfen Sie den Speicher Debug mit> Fenster> Speicher. Sie können tatsächlich die Adresse jedes einzelnen Bytes sehen, das in Ihrem StringBuilder gespeichert ist, wenn Append stmt ausgeführt wird.
Wenn Sie die Standorte programmatisch bekommen müssen this link könnte helfen.
Gute Antwort. Ich bin neugierig auf den Parameter 'maxCapacity'. Unterscheidet es sich auch konzeptionell von der maximalen Länge aufgrund möglicher Fragmentierung? Was passiert, wenn ich über die Kapazität gehe? Wenn es so funktioniert, wie ich es erwarten würde, dann könnte ich diese Klasse verwenden, um eine Befehlszeile zu erstellen, die von einer ausführbaren Datei ausgeführt wird, die die Länge der Argumente begrenzt. –
über [MSDN] (http://msdn.microsoft.com/en-US/library/system.text.stringbuilder.maxcapacity (v = vs.80) .aspx): Die maximale Kapazität für diese Implementierung ist Int32.MaxValue . Dieser Wert ist jedoch implementierungsspezifisch und kann sich in anderen oder späteren Implementierungen unterscheiden – poncha