言語ごとに空ループ&バブルソート(たぶん本当は選択ソート)の速度比較

※このコンテンツはすでに古くなっています。現在では成立しない可能性もありますし、そもそも速度で比較する理由も今やないと思われます。

なんか、調べてみました。おもしろそうだったんで。
VBの速度≪Cの速度というのはもはや当たり前すぎるのでメインはActiveBasicですね。

(06/03/23追記) Visual C# Express Editionを導入したので追加してみました。
タダで手に入るくせにVC6StandardEditionやVB6LearningEditionよりずっと高機能です。生意気な。

まずは空ループ

Visual BasicVisual C++Active BasicC#
Dim I as Long
For I = 0 To 999999999
Next
IDE上:18.2秒
実行ファイル:13.3秒
for (int i=0; i<=999999999; i++) {
}
デバッグコンパイル:4.4秒
リリースコンパイル:4.0秒
Dim I as Long
For I = 0 To 999999999
Next
デバッグコンパイル:18.2秒
リリースコンパイル:18.0秒
for (int i = 0; i < =999999999; i++)
{
}
デバッグコンパイル:4.2秒
リリースコンパイル:2.0秒

あらら、VBとAB、遅いですね~。
VBもABも空ループに関してはほぼ変化なし。
VBが遅いというのは有名だけどABも負けず劣らず遅いんですね。
どれも最適化はしていませんが(というよりできないのですが)、それなりに差は出るようですね。

またあとで実用的なアルゴリズムやAPI呼び出しについても調べてみようと思います。

(06/03/23追記) C#追加しました。
なんか異常事態です。ありえないスピードが叩き出されました。
そういえば最適化オプションをつけてたんだっけ。恐るべし最適化。

バブルソート

クイックソートはアルゴリズムを忘れてしまったので仕方なく忘れてもすぐ考え出せるバブルソートで。

Visual BasicVisual C++Active BasicC#
For k = 0 To size - 2
    For j = k + 1 To size - 1
        If data(k) > data(j) Then
            buf = data(k)
            data(k) = data(j)
            data(j) = buf
        End If
    Next
Next
IDE上:1.755秒
実行ファイル:1.615秒
for (i=0; i<size-1; i++) {
    for (j=i+1;j<size;j++) {
        if (data[i]>data[j]) {
            buf=data[i];
            data[i]=data[j];
            data[j]=buf;
        }
    }
}
デバッグコンパイル:0.115秒
リリースコンパイル:0.115秒
for i=0 to size-2
    for j=i+1 to size-1
        if data[i]>data[j] then
            buf=data[i]
            data[i]=data[j]
            data[j]=buf
        end if
    next
next
デバッグコンパイル:0.812秒
リリースコンパイル:0.778秒
for (i = 0; i < size - 1; i++)
{
    for (j = i + 1; j < size; j++)
    {
        if (data[i] > data[j])
        {
            buf = data[i];
            data[i] = data[j];
            data[j] = buf;
        }
    }
}
デバッグコンパイル:0.171秒
リリースコンパイル:0.062秒

データは圧縮ファイルの最初の16KBを4096項目の32ビット符号付き整数型配列に入れて使っています。読み込みの時間は計算に入れていません。
しかし分かりやすい結果が出ましたね。
やっぱりActiveBasic速いです。これでVBに負けたら廃棄処分にしようと思ってました。さすがです。謳い文句に嘘はありませんでした。
どうやら変数への代入が速いみたいですね。配列であるということも影響しているのでしょうか。
Cのほうは速すぎて話にならないのでもう何も語りません。
そこそこ速くてそこそこなじみやすいという点でActiveBasicはよいのではないでしょうか。

(06/03/23追記) やっぱり最適化パワーすごいです。
こんなすごいんだったらVC++も最適化のできるProfessionalEditionにしてりゃよかったな。

(24/09/10追記)バブルソートって書いてたけどたぶん選択ソートだこれ。