Verständnis der .NET internen StringBuilderCache-Klassenkonfiguration

7

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:

%Vor%

Beispiel Verwendung finden wir zum Beispiel in string.Format Methode:

%Vor%

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.

    
Konrad Kokosa 17.11.2013, 11:00
quelle

2 Antworten

16

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:)

    
Hans Passant 17.11.2013, 11:14
quelle
4

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.

    
Anders Abel 17.11.2013 11:08
quelle