最初に言及する必要があるのは、.Net コードはVM では実行されないということです。確かに .Net プログラムは Java の ByteCode に似た IL にコンパイルされますが、重要な違いは、VM によって解釈されるのではなく、アプリの起動前に IL も完全にネイティブ コードにコンパイルされることです。
.Net/VB6 の比較に移ります。特定のデータを指摘することはできませんが、個人的な経験からすると、あなたが何をしているかによって異なります.
これを説明するために、それぞれ vb6 と .Net バージョンを持つ 6 つの異なるベンチマーク アプリケーションについて考えてみましょう。各アプリケーションは特定の操作を選択し、それを 100,000 回実行してから、かかった時間を記録します。これは思考実験であることに注意してください。実際のアプリの結果を実際に見たことはありません。しかし、両方のプラットフォームの長所と短所を感じています。
アプリケーション A は、深刻な CPU 負荷の高い数値処理を行います。この場合、ここでの結果はほぼ同じであると信じなければなりません。VB6 と .Net はどちらもネイティブ コードにコンパイルされるため、CPUmult
命令は関係なく同じです。とはいえ、使用していない場合はOption Strict
、どちらのプラットフォームでもすぐに問題が発生する可能性があります. C# (基本的には常にOption Strict
) を使用したため、.Net コードに利点が生じる可能性があります。
アプリケーション B が出て、データベースから値を取得します。繰り返しますが、結果はおそらく非常に近いですが、2 つの理由から .Net に非常にわずかな優位性を与える必要があります。ネイティブ SQL クライアントを使用しているため、おそらく少し高速であり、自動接続プーリングなどを実行して、繰り返し接続するよりも、一度接続してその接続を再利用するなどを簡単に除外できます。しかし、コードに関する限り、リンゴとリンゴを比較すると、この 2 つは非常に近いものになる可能性があります。
アプリケーション C は、フォームの表示と非表示を繰り返します。ここで、vb6 に同意する必要があります。これは、率直に言ってレンダリングコストが安くなる、古くて派手さの少ないウィジェット セットに基づいています。また、WinForms コンポーネントはそれほど高速であるとは言えません。ただし、違いはおそらくあなたが思っているほど大きくはなく、フォームを完全に再描画することもあまりないでしょう。これはおそらく、ユーザーが不満を言う速度の遅さです。
アプリケーション D は文字列操作に基づいており、ここで .Net に同意する必要があります。VB6 と .Net はどちらも文字列操作が遅いことで知られています。ただし、.Net には、vb6 では利用できない多くのツールが用意されており、開発者がこの遅さを克服するのに役立ちます。とはいえ、これらのツールを認識していない場合、文字列操作の選択を誤ると、アプリが役に立たない作業を行って簡単に行き詰まる可能性があります。これは、ユーザーの苦情にも寄与している可能性があります。
アプリケーション E は、Xml ドキュメントをメモリに繰り返しロードしようとしています。繰り返しますが、.Net には利点があると考えざるを得ません。まず、vb で使用できる xml ツールはせいぜい原始的でした。それらが大幅に改善されていない可能性は低いと思います。さらに、.Net のガベージ コレクターは非常にスマートで、ロード中にメモリを割り当てたり解放したりする利点があります。ただし、ここでの最大の問題はディスク速度になると思います。つまり、違いはそれほど大きくないということです。
アプリケーション F は、繰り返し .Net または vb6 プログラムを開始し、(「準備完了」の何らかの定義のために) 準備が整うのを待ってから閉じます。ここでは、2 つの理由から、vb6 が有利である可能性があります。まず、.Net は最初の実行時に IL をバイトコードにコンパイルする必要があります。ありがたいことに、それは最初の実行にすぎません。次に、.Net アプリは、参照されているアセンブリも読み込む必要があります。比較すると、VB6 ランタイムははるかに小さいです。ただし、これは通常、特定のマシンでアプリを初めて起動したときにのみ当てはまり、.Net コードをプリコンパイルする方法があります。これは、知覚される速度低下にも寄与する可能性があります。
重要な点の 1 つは、これらすべてのアプリケーションで、.Net アプリのメモリ フットプリントがはるかに大きくなる可能性が高いということです。いくつかの理由で、開発者はこれをパフォーマンスの悪い特性と考える傾向がありますが、実際にはその逆です。アプリがより多くのメモリを使用している場合は、おそらくディスクへのアクセスに費やす時間が少なく、ディスクははるかに低速です。おそらくキャッシュも増えているため、CPU時間を節約できます。特に.Netの場合、より重要な期間、またはPCがアイドル状態の場合に、割り当て/割り当て解除操作を節約しています。
時間はありませんが、誰かが今日のコーディング ホラーで言及されている StopWatch 実装 (少なくとも .Net 側) を使用して、これらのそれぞれの実際のベンチマークを取得するのを見るのは興味深いことです。