-1

重複の可能性:
String と StringBuilder

+=文字列の連結に使用してはいけないのはなぜですか?

最も速い代替手段は何ですか?

4

2 に答える 2

1

文字列は .NET では不変です。つまり、一度存在すると変更できません。

StringBuilder、事前に決定されたnサイズの文字配列に追加できるようにすることで、この問題を軽減するように設計されています (デフォルトは 16 だと思います?!)。ただし、StringBuilder指定された制限を超えると、それ自体のより大きなコピーを割り当て、その中にコンテンツをコピーする必要があるため、より大きな問題が発生する可能性があります。

これが要約すると、時期尚早の最適化です。文字列の連結によるメモリの使用量が多すぎるという問題に気付いていない限り、心配する必要はありません。

于 2012-11-23T13:21:03.023 に答える
0

+= と String1 = String1+String2 は同じことを行い、文字列全体を新しいものにコピーします。

これをループで行うと、大量のメモリ割り当てが生成され、パフォーマンスが低下します。

長い文字列を作成する場合は、そのような操作用に最適化されたStringBuilder クラスを調べる必要があります。

要するに、いくつかの連結文字列はパフォーマンスに大きな影響を与えるべきではありませんが、ループに小さなビットを追加して大きな文字列を作成すると、速度が大幅に低下したり、大量のメモリが使用されたりします。

文字列のパフォーマンスに関する別の興味深い記事: http://www.codeproject.com/Articles/3377/Strings-UNDOCUMENTED

于 2012-11-23T13:18:44.027 に答える