1

約 50 個のソース ファイルで構成される C++/CLI アセンブリがあります。このアセンブリのコードは、多数の C++ ライブラリに静的にリンクして、さまざまな「重労働」タイプのタスクを実行します。

このアセンブリをビルドするために Visual Studio 8 (2005) SP1 を使用しています。

「プロジェクトのみ」->「リビルドのみ」を介してこのアセンブリだけを (依存関係などなしで) ビルドすると、まともなデュアルコア マシンで約 4.5 分かかります。以下は、おおよその時間で注釈が付けられた簡略化されたビルド出力です。

Compiling...
(file 0)
(file 1)
...
(file N)                   // About 2 min total to compile all files
Linking...                 // About 12s
Generating Code            // 42s
Finished Generating Code   // < 1s
Embedding Manifest         // < 1s
Generating Code            // 30s
Finished Generating Code
(15 seconds of nothing)
Done

このアセンブリのビルドに時間がかかる理由のデバッグを開始するにはどうすればよいですか? コンパイル時間とリンク時間は、それほど大きくはありませんが、おそらくこのサイズのプロジェクトに期待できる時間です。私が懸念しているのは、2 つの「コード生成」ステップがあり、それぞれが他のほとんどのプロジェクトよりもはるかに時間がかかるという事実です。

私の最初の推測では、これはアセンブリにリンクされているアンマネージ コードの量に関係しているということでした。しかし、同じくらい多くのネイティブ コードを使用するマネージ アプリケーション プロジェクトがいくつかあり、ビルド時間は非常に妥当です。

非常に長い時間がかかる2つの「コード生成」ステップの原因を正確に知っている人はいますか? 不足しているプロジェクト設定はありますか?

4

1 に答える 1

1

プロジェクトにプリコンパイル済みヘッダーを使用していますか?マネージC++は、アンマネージC++と同じ方法でサポートします。プロジェクトをプリコンパイル済みヘッダーに切り替えるには:

詳細については、この記事(「プリコンパイル済みヘッダー」セクションまでスクロールダウン)を参照してください。

  • すべての.cppファイルが#include"xxxx"で始まることを確認してください。ここで、xxxx.hはプロジェクトで使用されるすべての一般的なヘッダーファイルを含むヘッダーファイルです。
  • xxxx.hファイルのみを含み、他のコードを含まないxxxx.cppファイルを作成します
  • プロジェクト全体のVSコンパイル設定で、すべての構成(ビルドとリリース)のプリコンパイルヘッダーセクションで、プロジェクト全体でxxxx.hプリコンパイル済みヘッダーを使用するようにします。
  • ファイルのみのVSコンパイル設定で、xxxx.cppすべての構成(ビルドとリリース)のプリコンパイルヘッダーセクションで、「プリコンパイル済みヘッダーの生成」に設定します。

プロジェクトのコンパイルには、以前のビルド時間の何分の1かかかるはずです。

于 2009-09-27T19:08:26.870 に答える