プログラミングにおいて高速化は非常に大切です。
フォームアプリケーションをメインに高速化の手法について紹介します。
実際にコードと実行結果・実行速度の比較もしています。ご覧ください!
C# / VB.NETの高速化する方法
主にVB.NETのコードになります。
別の方法や、もっと良い方法を知っている方は、ぜひコメントにて教えていただきたいです!
文字列の連結
String型ではなくStringBuilderクラスを使用します。
結論を言うと、415倍の差が出ました。StringBuilderクラスを使用する方が高速です。
String型で連結してみた
下記のコードはVB.NETです。
For count As Integer = 1 To 5
‘ 計測開始
sw = Stopwatch.StartNew()
‘ String型の変数に1~50000までの数字を5万回連結する。
Dim str As String = String.Empty
For i As Integer = 1 To 50000
str &= i.ToString
Next
‘ 計測終了
sw.Stop()
Next
String型での実行速度
5万回を連結した結果です。
1回目: 2150 ミリ秒
2回目: 2235 ミリ秒
3回目: 2145 ミリ秒
4回目: 2164 ミリ秒
5回目: 2119 ミリ秒
平均時間: 2162.6 ミリ秒
StringBuilderクラスを使って連結してみた
下記のコードはVB.NETです。
Imports System.Text
For count As Integer = 1 To 5
‘ 計測開始
sw = Stopwatch.StartNew()
‘ String型の変数に1~50000までの数字を5万回連結する。
Dim str As New StringBuilder
For i As Integer = 1 To 50000
str &= i.ToString
Next
‘ 計測終了
sw.Stop()
Next
StringBuilderクラスでの実行速度
1回目: 5 ミリ秒
2回目: 5 ミリ秒
3回目: 6 ミリ秒
4回目: 5 ミリ秒
5回目: 5 ミリ秒
平均時間: 5.2 ミリ秒
ListBoxへのアイテムの追加
下記のコードはVB.NETです。
' 計測開始 sw = Stopwatch.StartNew() ' 描画停止 Me.ListBox1.BeginUpdate() ' リストボックスに1万回アイテムを追加する。 For i As Integer = 1 To 10000 Me.ListBox1.Items.Add("howmani.com") Next ' 描画再開 Me.ListBox1.EndUpdate() ' 計測終了 sw.Stop()
赤字の部分を使用することで高速化できます。
結論から言うと、23.6倍早くなりました。
描画処理のコードを追加したときとの比較
【追加しないとき】
1回目: 1061 ミリ秒
2回目: 1078 ミリ秒
3回目: 1109 ミリ秒
4回目: 1063 ミリ秒
5回目: 1055 ミリ秒
平均時間: 1073.2 ミリ秒
【追加したとき】
1回目: 46 ミリ秒
2回目: 45 ミリ秒
3回目: 44 ミリ秒
4回目: 47 ミリ秒
5回目: 45 ミリ秒
平均時間: 45.4 ミリ秒
他コントロールのアイテムの追加の高速化
上記のListBoxと同じ手法で高速化できます。
対応コントロール
- ListView
- ToopStripComboBox
- TreeView
- DataGridColumnStyle
Me.[コントロール名].BeginUpdate()
~
Me.[コントロール名].EndUpdate()
以上です。
参考になれば幸いです!
コメント