代わりに.Remove(0, sb.Length)
を使用してください。.Clear()
を使用してください。読み込みが容易で、Removeがこの特別なユースケースに対して最適化されていない場合、Clear
も高速になります。
新しいStringBuilderを割り当てるだけです。 StringBuilder自体は軽量なので、新しいものを使用することは高価になるとは思わない。
私は通常、Clear()
を区別せず、1つのパフォーマンス上の利点に基づいて新しいStringBuilderを割り当てますが、より良い読みやすいコードを作成します。それはあなたのユースケースに依存します。プロファイラが必要であることを示していない限り、マイクロ最適化しないでください。
私の経験では、メソッドの先頭に新しいStringBuilderを割り当て、関数の戻り値を生成するときにはToString
を呼び出します。その場合、StringBuilderを再利用するために関数インタフェースを複雑にするのはばかげている。
ToString()
と呼ぶと、StringBuilderが内部であるため、内部バッファは不変になり、StringBuilderは次の変更に新しいものを割り当てる必要があります。
1つのマイクロ最適化は、結果の長さを正確に(または少なくとも下限を)知っている場合、StringBuilderのコンストラクタに容量を渡すことです。次に、アレイを複数のステップで成長させる必要はありません。たとえば、出力が10000文字以上であることがわかっている場合は、10000の容量までビルダーを初期化することができます。
両方の回答が得られます。 .NETバージョンと同様、.NET 4.0ではStringBuilderの大きな変更が行われました。 –