[解決済み】C++はC#よりどのくらい速いのか?
質問
それとも、今は逆なのでしょうか?
聞くところによると、C#の方がC++より速い部分もあるらしいのですが、自分でテストする勇気がないんです。
この違いについて詳しく説明していただける方、または正しい情報を提供していただける方がいらっしゃいましたら教えてください。
解決方法は?
C#やJavaのようなバイトコードベースの言語でJITがある場合、C++コードと同等の速度が出せないという厳密な理由はありません。しかし、C++のコードは長い間、かなり高速でしたし、現在でも多くの場合、高速です。これは主に、より高度なJIT最適化の実装が複雑であるためで、本当にクールな最適化は今ようやく登場したところです。
だからC++の方が速いんです、多くの場合。しかし、これは答えの一部に過ぎません。C++が実際に速いのは、高度に最適化されたプログラムであり、専門のプログラマーがコードの地獄を徹底的に最適化した場合である。これは非常に時間がかかる(つまりコストがかかる)だけでなく、過剰な最適化によってエラーが発生することもよくあることだ。
一方、インタープリタ型言語のコードは、ランタイム(.NET CLRやJava VM)の後のバージョンでは、何もしなくても高速化されます。また、JITコンパイラには、ポインターを使う言語では不可能な、便利な最適化がたくさんあります。また、ガベージコレクションは一般に手動メモリ管理と同等かそれ以上に高速であるべきだと主張する人もいますが、多くの場合そうなっています。一般に、C++やC言語でもこれらすべてを実装して実現することは可能ですが、より複雑でエラーが発生しやすいものになるでしょう。
ドナルド・クヌースが言ったように、「時期尚早の最適化は諸悪の根源」なのです。もし、あなたのアプリケーションのほとんどが非常にパフォーマンスクリティカルな演算で構成されていて、それがボトルネックになり、C++の方が確実に速くなり、C++が他の要件と衝突しないことが確実なら、C++を選ぶとよいでしょう。それ以外の場合は、まず自分に最も適した言語でアプリケーションを正しく実装することに集中し、次に動作が遅すぎる場合にパフォーマンスのボトルネックを見つけ、コードを最適化する方法を考えます。最悪の場合、外部関数インターフェースを通じてC言語のコードを呼び出す必要があるかもしれないので、重要な部分を低レベルの言語で書く能力は残っているはずです。
正しいプログラムを最適化するのは比較的簡単ですが、最適化されたプログラムを修正するのはずっと難しいということを心に留めておいてください。
実際に何パーセントの速度が優れているかを示すことは不可能で、それはコードに大きく依存します。多くの場合、プログラミング言語の実装がボトルネックになっているわけではありません。たとえば、次のようなベンチマークがあります。 http://benchmarksgame.alioth.debian.org/ というのも、これらは主に演算コードをテストしており、あなたのコードとは全く似ていない可能性が高いからです。
関連
-
[解決済み】C#で四捨五入する方法
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] B "の印刷が "#"の印刷より劇的に遅いのはなぜですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] <は<=より速いのか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】PyPyが6.3倍速いなら、CPythonよりPyPyを使うべきじゃないのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み] なぜラムダはプレーンな関数よりもコンパイラによって最適化できるのですか?