Als ich mir die dekompilierten .NET-Assemblies ansah, um einige Interna zu sehen, habe ich die interessante StringBuilderCache
-Klasse bemerkt, die von den Methoden mehrerer Frameworks verwendet wird:
Beispiel Verwendung finden wir zum Beispiel in string.Format
Methode:
Obwohl es ziemlich clever ist und ich mich sicher an ein solches Caching-Muster erinnern werde, frage ich mich, warum MAX_BUILDER_SIZE
so klein ist? Wenn wir es auf 2 kB setzen, wäre das nicht besser? Es würde verhindern, größere StringBuilder
-Instanzen mit einem relativ geringen Speicheraufwand zu erzeugen.
Es ist ein Cache pro Thread, daher wird eine niedrige Anzahl erwartet. Am besten verwenden Sie die Referenzquelle für Fragen wie diese, Sie werden auch die Kommentare sehen. Was wie folgt aussieht (passend bearbeitet):
%Vor%"VS-Designer" ist ein kleines bisschen rätselhaft. Nun, nicht wirklich, sicherlich wurde diese Arbeit gemacht, um Visual Studio zu optimieren. Neelie Kroes würde einen Feldtag haben und die EU hätte eine weitere Milliarde Dollar, wenn sie es herausfinden würde:)
Die meisten erstellten Strings sind wahrscheinlich klein, so dass die Verwendung einer relativ kleinen Puffergröße die meisten Operationen abdeckt, ohne zu viel Speicher zu verbrauchen. Beachten Sie, dass ein Threadpool mit möglicherweise vielen erstellten Threads vorhanden ist. Wenn jeder von ihnen bis zu 2kB für einen zwischengespeicherten Puffer beanspruchen würde, würde dies zu einer gewissen Speichermenge führen.
Tags und Links .net c# stringbuilder .net-internals