私はよくC#のコンパイル速度を賞賛します。これまで私はわずかなアプリケーションしか作っていませんでしたが、実際にはコンパイルが非常に高速だったことに気付きました。しかし、これが依然として大きなアプリケーションのために保持されているのだろうかと私は思っていました。大きなC#プロジェクトは、同様のサイズのC++プロジェクトよりも速くコンパイルされますか?C#と比べると大きなプロジェクトのコンパイル時間
答えて
私の経験から言うと、C#はC++プロジェクトよりもはるかに高速にコンパイルできます。大規模なアプリケーションであっても
これは、C#がC++よりも言語としてあまり複雑ではなく、C#がIL(機械コードに後で最適化され翻訳される)に変換され、C++が機械語。
はい、C#は通常、より高速にコンパイルします。必ずしも十分速くはありません。私の最大のC#コードベースには、たくさんのプロジェクトを含む100万行のコードがあり、コンパイルするのに約1時間かかりました。しかし、私はこの時間の多くが、ビジュアルスタジオの不十分なビルドシステムに起因すると考えています。 一方、C++のコンパイル時間は通常より長くなりますが、コードの編成方法にはより多くの依存性があります。ヘッダーファイルの依存関係の扱いが悪いと、コンパイル時間が数桁増加しやすくなります。
+ 1ヘッダーファイルを整理することで、巨大なC++プロジェクトで1時間から8分に短縮しました! –
C++は、ヘッダファイルをインクルードするたびに再読み込みして再解析する必要があるため、コンパイルが非常に遅いです。 "#defines"の仕組みのせいで、コンパイラがすべてのヘッダファイルを自動的にあらかじめコンパイルすることは非常に難しいです。 (Modula-2はこれよりはるかに優れていました。)多くのC++プロジェクトでは、コンパイルされたC++ファイルごとに100秒のヘッダを読み込むのが普通です。
時々、インクリメンタルなC++コンパイルは、C#よりもずっと高速になります。すべてのC++ヘッダーファイル(およびデザイン)が非常に良い状態にある場合(Large-Scale C++ Software Design、Effective C++など)ほとんどのシステムで使用されるクラスの実装を変更し、1つのdllを再コンパイルするだけです。
クラスの移植を変更するたびにC#に別のヘッダーファイルがないため、クラスのパブリックインターフェイスが変更されていない場合でも、クラスの使用はすべて再コンパイルされます。これは、 "インターフェイスベースのプログラミング"と "依存性注入"などを使用してC#で削減することができます。しかし、それはまだ痛みです。
しかし、全体的に私はC#のコンパイルが十分速いが、大規模なC++プロジェクトのコンパイルは非常に遅いため、再構築の時間のために「基本クラス」にメソッドを追加したくないと感じている。
各クラスにいくつかのクラスがあるVisual Studioプロジェクトがたくさんあるので、C#の作成が遅くなる可能性があります。関連するプロジェクトをまとめて結合し、名前空間にプライベートなクラスを使用しないように開発者を「信頼する」ことは、時には大きなメリットがあります。 (nDependsは、ルールを破る人のチェックに使用できます)
(私がFileMonのコンパイルを高速化しようとすると、私はFileMonが非常に役に立ちました。したがって、コンパイル済みのヘッダーファイルにSTLを追加するだけで大きな違いが生まれました。したがって、ビルド時間を追跡して、遅くなったら調査してください)
+ 1あなたはライブラリの実装を変更するときだけリビルドを必要とする依存プロジェクトでC#の問題を指摘します。 C++はインターフェイスを実装から明確に分離する上でより良い仕事をしますが、実際には大きなプロジェクトに適しています。依存性注入は、コードベース全体を準拠した形で、すなわち侵襲的に書き直すことを強制するため、回避策に過ぎない。 –
C#はC++よりもはるかに高速です。主な理由の1つは、ヘッダーがないため、もちろんC#でヘッダーにする必要はないテンプレートです。しかし、テンプレート(Boostのようなほとんどすべての現代のC++ライブラリ)を多用していると、C++でのコンパイル時間が長くなります。
- 1. コンパイル時のC++プログラムの巨大なデータ
- 2. 大きなJavaプロジェクトを構成する方法 - プロジェクトと名前空間の比較
- 3. C#とVS2015:コンパイル時の時間を節約するには?
- 4. boost :: serializationを使用してライブラリとリンクするときの膨大なコンパイル時間
- 5. タイプとnewtypeのコンパイル時間と実行時間の差
- 6. Javaライブラリーランタイムとコンパイル時間
- 7. Larg GWTプロジェクトとコンパイル時の問題
- 8. 目的地Cの時間と日付を比較する
- 9. 大きなC++プロジェクトのIDEとしてのEmacs
- 10. Javaで時間と時間の操作を比較する
- 11. 大きなプロジェクトNode.jsとRESTfulなAPI
- 12. C#プロジェクトのメイクファイルとコマンドラインからのコンパイル
- 13. 比較時間すべての
- 14. シリアライゼーションチェック - 時間とランタイムをコンパイルする
- 15. ローカルNSDate時間とPST時間の営業時間を比較する
- 16. システム時間とユーザ入力時間を比較するPHP mysql
- 17. スウィフト式はXcodeでプロジェクトをコンパイルするとき、私はエラーを抱えている合理的な時間
- 18. 時間を現在の日付と時間と比較するには?
- 19. 時間と文字列の比較
- 20. MySQL DATETIMEスタンプとの時間比較チェック
- 21. 「コンパイル時間」と「実行時間」の違いは何ですか?
- 22. なぜ私のページのサイズはWikipediaと比べて大きいのですか?
- 23. MSBuildなしでC#プロジェクトをコンパイルすることはできますか?
- 24. コンパイル時間が長いです。C++
- 25. C#プロジェクトとC#プロジェクト間でポインタを渡すと、C#プロジェクトで安全でない場合があります。
- 26. UnixタイムスタンプとJavaScript時間;大きすぎる!
- 27. タイムスタンプと現在の時刻との時間を比較する方法
- 28. コンパイル時のプロジェクト(bin)フォルダパス?
- 29. CスタイルのリンクリストとC++のstd :: vectorとの大きな違い
- 30. Visual Studio 2010 vs 2012コンパイル時のパフォーマンスと安定性の比較
私も同じことを思っていました。私はC#で小さなアプリケーションをコンパイルし、コンパイルはC++に比べて驚くほど高速でした。 – Naveen
私はPIVでコンパイルするのに長い時間(約1分)かかった40以上のプロジェクトを作成しました(私は作成しませんでした)。私のPCをCore 2にアップグレードすると、コードをより少数のプロジェクトにリファクタリングするように、受け入れられる時間が大幅に短縮されました。 C#プロジェクトのコンパイル時には、多くのプロジェクトを持つことになります。 – RichardOD