Visual Basicでアプリケーションを作る場合、まず問題になるのが処理速度の問題 です。とにかく遅い,遅いといわれるVisual Basic。本当に遅いのでしょうか?計算方法、 処理する内容によって正確に比べることは難しいですが、ここでは、Visual BasicとVisual C++ について単純な計算の処理能力を検証してみます。
Visual Basic(Visual Basic4.0),Visual C++(Visual C++6.0)プログラム(バージョンが違うため 正確に判定はできません)での単純な計算をする時間を測ります。誤差を少なくするため、ループ回数を 1000万回としました。それぞれ、加,減,乗,除算を単独で行い、最後に 加減乗除算をセットで行いました。
以下のコードは加減乗除算セット時。
参考コード(Visual Basic)
Dim i As Long
Dim a As Integer, b As Integer
Dim Ans As Integer
a = 16: b = 8
t0 = Timer
For i = 0 To 10000000
Ans = a + b
Ans = a - b
Ans = a * b
Ans = a \ b
Next i
MsgBox "所要時間: " & Format(Timer - t0, "##0.00") & " sec"
参考コード(Visual C++)
char buf2[100];
long t0,t1;
long i;
int a,b;
int Ans;
a = 16; b = 8;
t0= GetTickCount();
for (i=0;i<10000000;i++) {
Ans = a + b;
Ans = a - b;
Ans = a * b;
Ans = a / b;
}
t1 = GetTickCount();
wsprintf(buf2,"%ld",t1-t0);
MessageBox(hWnd,buf2,NULL,MB_OK);
(計測結果-1000万回) *単位は秒
言語 加算 減算 乗算 除算 加減乗除算 VB 9.16 9.16 10.16 11.41 27.28 VC 0.78 0.79 1.33 4.42 5.64
計測条件−Pentium133,32MB加減算では、10倍以上の処理速度の差が見られますが、除算では、3倍弱 で、予想されたものより差はありません。なお除算については、計算方式が違うため 正確に比べることは不可能です。(Visual Basicで / 演算子を使うと、浮動小数点を返してし まう。\ 演算子は整数を返す。C言語では、 / 演算子は、小数点以下の切り捨 てなどの「丸め」処理をする。)
単純にそれぞれの加,減,乗,除算にかかった時間を合計すると、39.73,7.32秒 となります。加減乗除算セットの時間が、それぞれ 27.28,5.64秒なので、どちらも速くなっ ています。これは、For ループそのものにかかる時間分(3回のループ)、速く なっていると考えられます。
また、1回のFor ループ処理そのものにかかる時間は、
Visual Basic (39.73-27.27) / 3 = 4.18秒
このループ処理時間を差し引いた計算そのもの時間は、次の表のようになります。
Visual C++ (7.32-5.64) / 3 = 0.56秒、と推算できます。この推算は、実に興味深いと思います。加減算では20倍以上の処理能力の違いが あるのに対し、乗算では8倍程度となり、除算に至っては2倍以下です。 *単位は秒
言語 加算 減算 乗算 除算 加減乗除算 ループ処理 VB 4.98 4.98 5.98 7.23 23.10 4.18 VC 0.22 0.23 0.77 3.86 5.08 0.56
このことは、Visual Basicの除算が高速でVisual C++が低速というより、 計測に利用したCPUの演算処理が、除算に弱いことを示しています。 つまり、この実験の環境において除算を多用するようなプログラムでは、 Visual BasicとVisual C++の処理能力差は気にするほどではないということになります。
しかし、どちらにしてもVisual Basicの計算能力が劣ってることは確かで あり、これを補うには、計算部分だけVisual C++プログラムに任せる (Visual C++で.dllファイルをつくり、 Visual BasicからWINAPIとして呼び出す)方法があります。
(注意) 今回の計測は、整数型に限ったもので、浮動小数点型ではどういった結果が 分かりません。また、Visual BasicとVisual C++のバージョンが違うので、正確な比較はでき ません。