ハウツーマニア | これってどうやる?困ったときに使える方法!

困ったときにはハウツーマニアにお任せください!あのやり方・方法がわからない、を解決へ導いてみせます!内容は自己責任で実行してください。

C#/VB.NETの高速化の方法。コードちょっと追加するだけ!

記事を共有:

プログラミングにおいて高速化は非常に大切です。

フォームアプリケーションをメインに高速化の手法について紹介します。

実際にコードと実行結果・実行速度の比較もしています。ご覧ください!

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("www.jami2010.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()

 

 

以上です。

参考になれば幸いです!