1

.NET の文字列と文字列ビルダーの違いは何ですか?

4

4 に答える 4

5

文字列は不変の型です。連結などの多くの文字列操作を実行する場合、パフォーマンス特性が低下します。

一方、文字列ビルダーは、各連結で新しい文字列の割り当てが必要になる可能性が低くなるように、成長するバッファーを保持することでこの弱点を克服します。

文字列ビルダーは多少のオーバーヘッドを追加するため、重要な文字列作業が行われる場合 (ループなど) にのみ必要になります。コードが高速であれば、心配する必要はありません。そうでない場合は、プロファイラーを使用して、この問題があなたのケースで重要かどうかを確認してください。

最後に 1 つ: この回答は実際には ASP.NET とは何の関係もありません。これは、すべての .net および他の多くの言語の文字列にも当てはまります。

于 2010-01-04T04:32:03.260 に答える
1

string は不変であり、stringbuilder は可変です。

オブジェクト指向および関数型プログラミングでは、不変オブジェクトは、作成後に状態を変更できないオブジェクトです。これは、作成後に変更できる可変オブジェクトとは対照的です。

不変オブジェクトは、コピーや比較のためのコストのかかる操作を省略できるため、多くの場合便利です。これにより、プログラム コードが簡素化され、実行が高速化されます。ただし、オブジェクトに大量の変更可能なデータが含まれている場合、オブジェクトを不変にすることは通常不適切です。このため、多くの言語では不変オブジェクトと可変オブジェクトの両方が許可されています。

文字列オブジェクトへの連結が行われるたびに、新しい文字列オブジェクトが新しい参照で作成され、オブジェクトに割り当てられます。古いオブジェクトはメモリ内に残ります。

于 2010-01-04T04:29:21.903 に答える
1

http://en.csharp-online.net/CSharp_String_Theory%E2%80%94String_vs._StringBuilder

基本的に、Strings は不変です。操作するたびに、メモリ内に再作成する必要があります。StringBuilder反復的な文字列連結やその他の操作操作を処理している場合は、メモリ上でより簡単になり、ほぼすべての場合ではるかに高速になります。

この SO 投稿で、より良い議論が見つかるかもしれません: String vs. StringBuilder

于 2010-01-04T04:28:22.547 に答える