- PR -

StringBuilderの使い方について。

投稿者投稿内容
Izumi, Y.
ベテラン
会議室デビュー日: 2002/03/19
投稿数: 77
お住まい・勤務地: 東京
投稿日時: 2003-11-10 10:09
Length と Remove の処理速度は、ほぼ同じか少し Length のほうが速いかぐらいに考えていましたが、Remove のほうが少し速いというのは少し興味深いですね。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2003-11-10 21:57
引用:

IZUMI Yusukeさんの書き込み (2003-11-10 10:09) より:
Length と Remove の処理速度は、ほぼ同じか少し Length のほうが速いかぐらいに考えていましたが、Remove のほうが少し速いというのは少し興味深いですね。


たまたま試した環境では、Length の方がかなり早かったです(2倍程度)。
ただし、.NET Framework 1.0 の環境ですので、バージョンでかなり違うのかもしれません。

ちなみに、ループ内部の処理が複雑なのであれば、StringBuilder 1つの生成程度は、ほとんど問題にならないかもしれません。
場合によっては、やってることを分かりやすいようにするために、New を使うというのもありかもしれません。

mei さん
> str = GetStr1() + GetStr2() + GetStr3() + ...;
> ↑こういう場合は、StringBuilderよりも上記のように羅列した方が速いです。
これって、どういうのと比較した場合でしょう?

dai さん
> メモリが気になるのであれば、参照カウンタを減らし(Nothing を代入し)て、
参照カウンタはないと思います…というのはさておき、
> GC.Collect(); します。
この方法はあまりやらないほうが良いのでは…
DT
常連さん
会議室デビュー日: 2003/05/06
投稿数: 31
投稿日時: 2003-11-11 09:17
なちゃ様、ご回答有り難うございます。
私も気になったので会社PCでテストしてみました。
2台のPCで実施したのですが、両方とも.NETFramework1.1です。
(Visual Studio.NET 2003)
まずWinXPの方はややLength = 0 の方が速かったです。
次にWindows2000 ServerではRemove〜の方が速かったです。
こちらの環境では2倍もの差が付きませんでした…。
mei
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 114
投稿日時: 2003-11-11 12:14
引用:

なちゃさんの書き込み (2003-11-10 21:57) より:
mei さん
> str = GetStr1() + GetStr2() + GetStr3() + ...;
> ↑こういう場合は、StringBuilderよりも上記のように羅列した方が速いです。
これって、どういうのと比較した場合でしょう?


ちょっと説明不足でした。

StringBuilder sb = new StringBuilder();
sb.Append(GetStr1());
sb.Append(GetStr2());
sb.Append(...);
sb.ToString();
というケースです。

これを、
s = GetStr1() + GetStr2() + ...と書くと、
s = String(GetStr1(), GetStr2(), ...);
と、Stringクラスの引数ありコンストラクタに置き換えられるので速いということでした。

スキルアップ/キャリアアップ(JOB@IT)