表は、速度倍率順に並んでいます。
速度倍率は、ここでは遅い方が速い方の何倍の時間がかかったかという数値のことです。
速度倍率が大きいほど速い方を使った時に効果があります。
速い方 | 遅い方 | 速度倍率 | 解説 |
---|---|---|---|
テーブルを利用 | Choose関数 | 20.6 | 解説 |
Ifで場合分け | Switch関数 | 20.4 | 解説 |
Selectで場合分け | Choose関数 | 9.26 | 解説 |
Ifで場合分け | IIf関数 | 4.84 | 解説 |
Moveメソッド | プロパティ指定 | 3.08 | 解説 |
テーブルを利用 | Selectで場合分け | 2.15 | 解説 |
If...ElseIf... | Select Case... | 1.56 | 解説 |
Withあり | Withなし | 1.30 | 解説 |
If A * B = 0 Then | If A = 0 Or B = 0 Then | 1.11 | 解説 |
引数をByVal渡し | 引数をByRef渡し | 1.06 | 解説 |
ゴーストに注意!
この速度比較は、当然のことながら、二つのコードを実行する条件は同じにしなければなりません。しかしながら、それは簡単なことではありません、というより完全にはまず無理です。
したがって、ある程度正確にする手段を講じて、後は妥協したほうがいいでしょう。
その手段として、空ループの時間を引くという手段を講じました。
これまではこれだけでも充分でしたが、WindowsXPではそうもいかなくなったようです。
それが、ビジー状態のときに現れるゴーストウィンドウです。
速度比較のプログラムは、ビジー状態をわざと作っているわけですから、それを邪魔されては困るわけです。
実際、ゴーストウィンドウがあるときは実際のウィンドウは非表示になっていますから、ゴーストウィンドウ表示中の方が若干速くなります。
以下のコードで、色の変わり目にゴーストウィンドウが現れるように調整してやると、後者のほうが1割程度速くなります。
'ループ前に背景色を白にしますPicture1.Left = Rnd * 1000 | 'ループ前に背景色を黒にしますPicture1.Left = Rnd * 1000 |
(参考ページ)