- - PR -
StringBuilderの使い方について。
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-11-10 10:09
Length と Remove の処理速度は、ほぼ同じか少し Length のほうが速いかぐらいに考えていましたが、Remove のほうが少し速いというのは少し興味深いですね。
| ||||
|
投稿日時: 2003-11-10 21:57
たまたま試した環境では、Length の方がかなり早かったです(2倍程度)。 ただし、.NET Framework 1.0 の環境ですので、バージョンでかなり違うのかもしれません。 ちなみに、ループ内部の処理が複雑なのであれば、StringBuilder 1つの生成程度は、ほとんど問題にならないかもしれません。 場合によっては、やってることを分かりやすいようにするために、New を使うというのもありかもしれません。 mei さん > str = GetStr1() + GetStr2() + GetStr3() + ...; > ↑こういう場合は、StringBuilderよりも上記のように羅列した方が速いです。 これって、どういうのと比較した場合でしょう? dai さん > メモリが気になるのであれば、参照カウンタを減らし(Nothing を代入し)て、 参照カウンタはないと思います…というのはさておき、 > GC.Collect(); します。 この方法はあまりやらないほうが良いのでは… | ||||
|
投稿日時: 2003-11-11 09:17
なちゃ様、ご回答有り難うございます。
私も気になったので会社PCでテストしてみました。 2台のPCで実施したのですが、両方とも.NETFramework1.1です。 (Visual Studio.NET 2003) まずWinXPの方はややLength = 0 の方が速かったです。 次にWindows2000 ServerではRemove〜の方が速かったです。 こちらの環境では2倍もの差が付きませんでした…。 | ||||
|
投稿日時: 2003-11-11 12:14
ちょっと説明不足でした。 StringBuilder sb = new StringBuilder(); sb.Append(GetStr1()); sb.Append(GetStr2()); sb.Append(...); sb.ToString(); というケースです。 これを、 s = GetStr1() + GetStr2() + ...と書くと、 s = String(GetStr1(), GetStr2(), ...); と、Stringクラスの引数ありコンストラクタに置き換えられるので速いということでした。 |