9

for ループがあり、私がしているのはこれです。

forloop ( loop 7000 times)
{
x += 2000_char_long_string;
}

この forloop では、コードが非常に長く続きます。おそらく 1 分以上かかります。どうすればこの問題を解決できますか?

ありがとう。

4

5 に答える 5

2

文字列の操作は不変です。stmt x +=2000_char_long_string;のたびに新しい文字列が作成されます。実行されます。したがって、Kobiが提案しているように、StringBuilderクラスを使用する必要があります。

ただし、この場合、StringBuilderコンストラクターで容量を指定する必要があります。

これは、指定されていない場合、作成中のStringBuilderのデフォルト容量が16であるためです。

この容量が使い果たされると、新しい連続したメモリの場所が作成され、StringBuilderのすべてのコンテンツが新しい場所にコピーされ、インスタンスが新しい場所を指すようになります。最終的な文字列のおおよそのサイズ(おそらく7000 * 2000)をすでに知っているので、それに応じて容量を指定できます。

StringBuilderと容量に対する私の答えをご覧ください。詳細については。

于 2009-11-17T11:36:08.937 に答える
1

C# 文字列オブジェクトは不変で、内容が変更されるたびに新しいオブジェクトが作成され、新しい内容がコピーされます。代わりに StringBuilder を使用してください。直面している問題に対処するために提供されています

于 2009-11-17T11:27:01.523 に答える