.NETのStringBuilderの内容をクリアする最良の方法
2023-10-04 22:32:41
質問
StringBuilderを再利用するために、コンテンツをクリアする最善の方法(持続時間や消費リソースが少ない)は何だと思うかをお聞きしたいのです。次のようなシナリオを想像してください。
StringBuilder sb = new StringBuilder();
foreach(var whatever in whateverlist)
{
sb.Append("{0}", whatever);
}
//Perform some stuff with sb
//Clear stringbuilder here
//Populate stringbuilder again to perform more actions
foreach(var whatever2 in whateverlist2)
{
sb.Append("{0}", whatever2);
}
そして、StringBuilderをクリアする場合、2つの可能性が考えられます。
sb = new StringBuilder();
または
sb.Length = 0;
クリアするのに最適な方法とその理由を教えてください。
ありがとうございます。
EDIT: 私は現在の.NET 3.5バージョンで言及しました。
どのように解決するのですか?
.NET 2.0や3.5で行う場合は、このような拡張メソッドを書いてください。
/// <summary>
/// Clears the contents of the string builder.
/// </summary>
/// <param name="value">
/// The <see cref="StringBuilder"/> to clear.
/// </param>
public static void Clear(this StringBuilder value)
{
value.Length = 0;
value.Capacity = 0;
}
すると、このようにクリアすることができます。
someStringBuilder.Clear();
そして、4.0が出たときに、拡張メソッドを捨てて、4.0バージョンを採用することができます。
アップデイト : キャパシティをゼロに設定するのは、おそらく良いアイデアではないでしょう。同じインスタンスを再利用する場合、ビルダーに追加するときに再割り当てが保証されるからです。しかし、Capacityを非常に小さな値(例えば1)に設定するまで、ビルダーのインスタンス内のメモリは解放されない。Capacityプロパティのデフォルト値は16です。16 を使用するか、(効率は悪くなりますが)Capacity を 2 回設定することを検討するとよいでしょう。
- メモリをクリアするために 1 または 0 に設定する
- 元の容量値(16とは異なる場合があります)に設定すると、復元されます。
関連
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】.NETのNotImplementedExceptionのようなものがJavaにあるのか?
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み] .NETで文字列を改行で分割する最も簡単な方法とは?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] C#で文字を繰り返し表示する最適な方法
-
[解決済み] アプリケーションフォルダのパスを取得する最適な方法
-
[解決済み] 文字列を反転させる最適な方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み] 関数を終了するには?
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。