- ベストアンサー
.NET C++の処理速度
- C++とVBで書かれた.NETの処理速度について
- .NET、JVM、ネイティブのCとの処理速度比較
- C++もVBも.NET上で動く場合、処理速度の差はほとんどない
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
古い情報なので、最新版とは違うと思いますが・・ 2002年に.NETが出てすぐ、業務での使用を検討するため比較しました。 #今は.NETがもっと洗練されているはず・・・ 【円周率 20000桁計算 マーチンの式を使用】 ・VC6(Native) debug:91秒 Release:33秒 ・VC.NET(CLR) debug:81秒 Release:78秒 当時のCPUなので絶対値は意味ないですが、繰り返しが多い処理では .NETが予想外に善戦しました。 ただ、これは、繰り返しでの計算のみのなので、表示や他の処理を行なう 場合には、まったく異なる結果になる可能性も大です。
その他の回答 (2)
- BLK314
- ベストアンサー率55% (84/152)
これは一概には言えないと思います。 と言いますのは、 最近は"オプティマイザー"が大変賢くなってきているからです。 まず、前提ですが .NETはインタープリターではありません。 これは (過去の私も含めて)非常に誤解の多い所です。 毎回のようにネイティブ変換しながら実行していたのでは とても非効率です。それこそ、ネィティブCとは比較するのも 恥ずかしいほど遅いでしょう。 実際には、プログラムがロードされた時点で ネィティブに変換されます。 ですから、ロードの時間は大変長くなりますが、 一旦ロードされれば、ネィティブの速度が期待できます。 また、インストール時に変換させることもできます。 こうすれば、実行時は完全にネィティブの速度が出ます。 冒頭に述べていたオプティマイザの影響について述べます。 通常のC/C++はできるだけバイナリ互換を広くとろうとビルドします。 別の見方をすれば、 実行環境に関する仮定をできるだけ少なくする ともいえます。 つまり、Pentium4用にビルドした場合は 実際に走るCPUがCore2であっても、 単なる高速なPen4にしかなりません。 CPUキャッシュなどを仮定した最適化などは (指示がない限り) 行わないのが普通です。 しかし、.NETのネィティブへの変換の際には 実行環境が完全に特定されています。 CPUに大容量のキャッシュがあれば、 ギリギリまでサイズを小さくし キャッシュに詰め込めるサイズに最適化しようとするでしょうし、 4バイト境界ではキャッシュに入らないが、 1バイト境界に詰めればキャッシュに収まるなら キャッシュに収まるよう配置するということも考えられます。 逆に、CPUキャッシュが小さすぎて どう工夫してもキャッシュに収まらないのであれば、 素直に4ビット境界に配置し メモリアクセスの高速化を図ることもあると思います。 このような最適化は、一般のC/C++ではできません。 (プログラマが明示的に指示すれば可能です) 実行環境に対し完全に最適化された、.NETと 中途半端に最適化されたC/C++ それでも ”越えられない壁" があるほど差が付くとは 断定できないと思います。
- SAYKA
- ベストアンサー率34% (944/2776)
??? Cで書かれた物ってさ 「ライブラリ」 を作ったりするでしょ? じゃぁさ、Frameworkって 「何で作られたライブラリ」だと思う? まぁ嫌なら.NETじゃないVCとかでやるしかないかも。 それでも油断してるとすぐFrameworkのライブラリを使おうとしやがるけど。