1

重複の可能性:
StringBuilderの容量はどのように変化しますか?

StringBuilderが割り当てられた後、85kを超えるまでに成長したとすると、ラージオブジェクトヒープに移動されますか?

4

2 に答える 2

5

StringBuilder「成長」しません。

4.0より前のSBでは、新しい大きなバッファを割り当て、コンテンツを古いものから新しいものにコピーするだけでした。つまり、最終的には、内部バッファはLOHに移動されました。SBオブジェクトは非常に小さいため、そうではありません(簡単にするために、単にバッファーへの参照とバッファー内の文字列の長さである可能性があります。コピーオンライトの後に実装されたため、少し複雑でした。ToStringそのため、メソッドToStringはバッファを読み取り専用にして文字列として返し、SBへの他の書き込みはバッファを複製しました)。

4.0では、SBはバッファのリンクリスト(「ロープ」と呼ばれます)のようなものを使用し、それらは常にLOHに移動しないように十分に小さいです。

于 2011-10-03T20:18:20.443 に答える
2

それStringBuilder自体はLOHに割り当てられませんが、その内部文字列バッファは割り当てられます。アロケータは、どのオブジェクトがデータを割り当てているかについては何も知りません。ある最大サイズよりも大きい割り当てがLOHに送られることを知っているだけです。

于 2011-10-03T20:19:31.213 に答える