|
| コントロールID | プロパティ名 | 設定値 |
|---|---|---|
| Button1 | (Name) | AddButton |
| Text | Add | |
| Button2 | (Name) | AddButton |
| Text | AddRange | |
| Label1 | (Name) | AddResult |
| Text | 0 Count | |
| Label2 | (Name) | AddRangeResult |
| Text | 0 Count | |
| ListBox1 |
アプリケーションを実行して選択した画像がフォームに表示されていることを確認します。


フォームをダブルクリックして、Form1.vb のコードを表示します。フォームの先頭行に以下のコードを追加します。
Imports System.Globalization
続いてテスト用の変数を設定します。 Public Class Form1 Inherits System.Windows.Forms.Form に続けて以下のコードを追加します。
Private count As Integer = 1000

AddButton をダブルクリックし、Add メソッドでデータを追加する処理を実装します。
Private Sub AddButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click Dim start As Integer = Environment.TickCount Dim i, j As Integer Me.ListBox1.Items.Clear() For j = 0 To count For i = 0 To 11 Me.ListBox1.Items.Add(DateTimeFormatInfo.InvariantInfo.MonthNames(i)) Next Next Label1.Text = Environment.TickCount - start & " Counts" End Sub
内側のループで January から December までの文字列を Add メソッドを使って挿入します。ただしこれだけでは時間が不十分なため、外側のループで規定回数だけ繰り返します。

AddRangeButton をダブルクリックし、 AddRange メソッドでデータを追加する処理を実装します。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles AddButton.Click
Dim start As Integer = Environment.TickCount
Dim i, j As Integer
Me.ListBox1.Items.Clear()
For j = 0 To count
Me.ListBox1.Items.AddRange(DateTimeFormatInfo.InvariantInfo.MonthNames)
Next
Label2.Text = Environment.TickCount - start & " Counts"
End Sub
前のステップと同じ処理を AddRange メソッドを使って実装しています。これを見ると分かりますが、前のステップでは FOR ループを回して追加していた部分が、 AddRange メソッド1回にまとめられていることが分かります。コードの可読性という意味でも、 AddRange メソッドにはメリットがあります。

以上で、実装は完了です。では実際にビルとしてパフォーマンスのテストをしてみましょう。「ビルト」メニューから「ソリューションのビルト」を実行してアプリケーションをビルトします。問題がなければ、「デバッグ」メニューから「デバッグ無しで開始」を実行します。

始めに Add ボタンを押してみます。このアプリケーションでは January から December の文字列をリストボックスに追加し、そのときにかかる時間を測定します。しかし、12個のデータの挿入はナノ秒単位の処理になってしまうため、違いがわかりません。そこで、このアプリケーションでは、指定したカウント数(1000回)だけ文字列をリストボックスに挿入します。なお、時間の計測は CPU の処理カウントである TickCount を利用します。
Addメソッドを使ってデータを追加した場合、約1000カウントかかりました。 (これは環境によって異なります)
続けて AddRange ボタンを押してテストします。ボタンを押すと始めに ListBox を消去するメソッドを実行してデータをクリアしてから、タイマーの初期値を取得し、データ挿入を解します。この順番を間違えると、データクリアの時間も計測されてしまうため、正しい計測ができません。テストアプリケーションではこういった部分を注意して実装する必要があります。
AddRange メソッドを使ってデータを追加した場合、約200カウントでデータの挿入が完了しました。5倍以上のパフォーマンスが出たことになります。これが、アプリケーションを起動したときの初期設定であれば、ユーザーの待ち時間に影響が出ることでしょう。

ただし、この方法が使えるのは元データが配列で用意されていることが条件になります。こういった条件が成り立つケースでは、うまく活用してクライアントアプリケーションのパフォーマンスを向上させましょう。
Top of Page