● If と IIf はどっちが速い? ●

IIfって知ってると便利。でも…

If と IIf ってどっちが速いのか前から気になっていたので、ちと調べてみましょう。
あ、そうそう。まず環境を書いておく。

 機種   Compaq DeskPro 
     100MHZ、 RAM:64MB、 HDD:1GB 
 OS   Microsoft Windows NT 4.0 (SP2) 
 言語   Visual Basic 5.0 Enterprise Edition (SP3) 

調べ方は簡単。それぞれ、結果が同じになる処理をそれぞれループで回し、ループ開始時間と終了時間の差を求めれば良い。その差の取得には、GetTickCount API 関数を使用する。コード的にはこんな感じ(差の取得方法は面倒なので載せない)。

  'Ifの場合
  For i = 0 To 10000
    If ret = 0 Then
      ret = 1
    Else
      ret = 0
    End If
  Next i

  'IIfの場合
  For i = 0 To 10000
    ret = IIf(ret = 0, 1, 0)
  Next i

10000という所は1000、5000、10000、15000 … 50000と変え、それぞれの速さを求めたらそれは以下の通りだった。

IfとIIfの速度比較(22.6KB)

意外であった、実際。IIfってとてもとても遅い。とは言っても、大規模なループ処理でがっつり使うようなことをしなければ大丈夫かと。ループ処理でないコードで数回くらい使ったとしても、If との差はどうせナノ秒単位なので気にしない、気にしない。こんな便利なもの使わない手はない、1行でまとまるので見た目もスマートになるし。私はこれからもこの素晴らしい IIf をどんどん使うことでしょう。あしからず。

そう言えば、C言語でも IIf のようなものがある。(ret = 0 ? 1 : 0) てな感じのやつ。3項演算子と呼ばれているようであるが、これも同じ事が言えるのかな?ちょっと素朴な疑問が浮かんでしまった私であった。


戻る