掲示板お問い合わせランダムジャンプ



この広告は30日以上更新がないブログに表示されております。 新しい記事を書くことで広告を消すことができます。

Top Index

2014年07月19日
StringBuilderのLengthプロパティは遅いか?速いか?
CSVファイルを書き出す時など、
delimiter(区切り文字)を足すべきかどうかを判断する処理を多数書くことになります。
具体的にいうと、
・行データが空なら区切り文字を付けずに値を結合する
・それ以外は区切り文字を足してから値を結合する
の分岐を行うため、行が空かどうかを調べるわけですね。

行データをStringBuilderクラスで管理するとした場合、
今行データが空なのかどうかは調べる方法として
A Lengthプロパティで評価する。
B 初めて値が追加されたとき、フラグ変数にONにしてフラグ変数で評価する。
ぐらいが考えられます。

速度的にいうと「B」の方が速そうですが、コーディング的には「A」の方がシンプルですね。
で、「Aのコードは本当に遅いのか?」を調べたいと思います。

Dim s As New StringBuilder
Dim flag As Boolean = False

Dim checkPerformance =
Sub()
Dim sw As New Stopwatch
sw.Start()
For n As Integer = 1 To 100000
'無駄にコールする
If s.Length <> 0 Then flag = True
Next
sw.Stop()
Debug.Print("Length Check : " & sw.ElapsedMilliseconds)
End Sub

checkPerformance.Invoke()

For i As Integer = 1 To 1000
s.Append("*")
Next

checkPerformance.Invoke()

こんな無意味なコードを走らせて速度計測してみるわけです。

で、結論
Lengthプロパティの評価速度は文字列長に依存せず、高速に評価される。

PC環境にもよりますが、私のPC(Core i7 2.93GHz)で
10万回Lengthプロパティをコールして1msecかかる程度でした。

また、Appendを1,000回しようが、1,000,000回しようが、
Lengthプロパティの評価速度は変わりませんでした。
[ 投稿者:mk3008 at 12:05 | VB.NET | コメント(0) | トラックバック(1) ]

この記事へのコメント

この記事へのトラックバック
StringBuilderに区切り文字を追加する拡張メソッド
大したコードではないです。個人的によく使うのではっときます。StringBuilderが空かどうかを判断して、空でない場合は区切り文字を追加する。...
投稿者: VB.NETで作る! at 2014-08-14 22:15:09

この記事へのトラックバックURL
http://shinshu.fm/MHz/88.44/a02480/0000445604.trackback

この記事の固定URL
http://shinshu.fm/MHz/88.44/archives/0000445604.html

記事へのコメント
 
簡単演算認証: 9 x 5 + 5 =
計算の答えを半角英数字で入力して下さい。
名前: [必須]
URL/Email:
タイトル:
コメント:
※記事・コメントなどの削除要請はこちら