重複の可能性:
StringBuilderの容量はどのように変化しますか?
StringBuilderが割り当てられた後、85kを超えるまでに成長したとすると、ラージオブジェクトヒープに移動されますか?
重複の可能性:
StringBuilderの容量はどのように変化しますか?
StringBuilderが割り当てられた後、85kを超えるまでに成長したとすると、ラージオブジェクトヒープに移動されますか?
StringBuilder
「成長」しません。
4.0より前のSBでは、新しい大きなバッファを割り当て、コンテンツを古いものから新しいものにコピーするだけでした。つまり、最終的には、内部バッファはLOHに移動されました。SBオブジェクトは非常に小さいため、そうではありません(簡単にするために、単にバッファーへの参照とバッファー内の文字列の長さである可能性があります。コピーオンライトの後に実装されたため、少し複雑でした。ToString
そのため、メソッドToString
はバッファを読み取り専用にして文字列として返し、SBへの他の書き込みはバッファを複製しました)。
4.0では、SBはバッファのリンクリスト(「ロープ」と呼ばれます)のようなものを使用し、それらは常にLOHに移動しないように十分に小さいです。
それStringBuilder
自体はLOHに割り当てられませんが、その内部文字列バッファは割り当てられます。アロケータは、どのオブジェクトがデータを割り当てているかについては何も知りません。ある最大サイズよりも大きい割り当てがLOHに送られることを知っているだけです。