Microsoft での私の提案を参照してください: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=511300
あなたはそれに投票するべきです!これが私の最後のコメントです:
はい、ほとんどのプロジェクトをビルドするためにインクリメンタル リンクを使用しています。大規模なプロジェクトの場合、それは役に立ちません。実際、これらのプロジェクトをインクリメンタル リンクでリンクするには、より多くの時間がかかります (2 分 44 と比較して 2 分 50)。ILK ファイルのサイズが大きい場合は機能しないことがわかりました (最大のプロジェクトでは、win 32 で 262144 KB の ILK が生成されます)。
以下に、リンク時間を短縮するために試みたその他の事項を示します。
- コードの肥大化を減らすための明示的なテンプレートのインスタンス化。小さなゲイン。
- IncrediLink (IncrediBuild はコンパイルで興味深い効果をもたらしますが、リンクではほとんど効果がありません)。
- めったにデバッグされないライブラリのデバッグ情報を削除します (良い結果が得られます)。
- « Pre-Build Event » で PDB ファイルを削除します (奇妙なことに、3 分 34 秒ではなく 2 分 44 秒の興味深いゲインが得られます)。
- 多くの静的ライブラリを DLL に変換します。重要なゲイン。
- ディスクキャッシュを最大化するために、大量の RAM を搭載したコンピューターで作業します。最大の収穫。
- 大きなオブジェクトと小さなオブジェクト。変わりはない。
- プロジェクト オプションを変更します (/Ob1、/INCREMENTAL、COMDAT 折りたたみの有効化、マニフェストの埋め込みなど)。興味深い利益をもたらすものもあれば、そうでないものもあります。私たちは継続的に設定を最大化しようとします。
- 内部リンケージ対外部リンケージを最大化します。これは良いプログラミングの練習です。
- 余裕がある限り、ソフトウェア コンポーネントを分離します。高速にリンクする単体テストで作業することができます。しかし、まだ相互にやり取りする必要があります。レガシー コードがあり、サード パーティのコンポーネントを使用していました。
- シークレット リンカー スイッチ /expectedoutputsize:120000000 を使用します。小さなゲイン。
すべての実験で、リンク時間を細心の注意を払って測定したことに注意してください。リンク時間が遅いと、生産性が大幅に低下します。複雑なアルゴリズムを実装したり、困難なバグを追跡したりする場合、このシーケンスを迅速に反復する必要があります: 一部のコードを変更し、リンクし、デバッグをトレースし、一部のコードを変更し、リンクなど...
リンク時間を最適化するもう 1 つのポイントは、継続的インテグレーション サイクルに与える影響です。共通コードを共有する多くのアプリケーションがあり、継続的インテグレーションを実行しています。すべてのアプリケーションのリンク時間は、サイクル時間の半分 (15 分) でした...
スレッドhttps://blogs.msdn.microsoft.com/vcblog/2009/09/10/linker-throughput/では、リンク時間を改善するための興味深い提案がいくつか行われました。64 ビットのコンピューターで、ファイルを完全に RAM で操作するオプションを提供してみませんか?
繰り返しになりますが、リンク時間を短縮するのに役立つ可能性のある提案は大歓迎です。