2013-03-14 7 views
12

コンパイラが時間を費やす場所を知りたいのですが?コンパイラがどこで時間を費やしているかを調べるにはどうすればよいですか?

ビルドが遅すぎます。私は既にVC++の一時ファイル用にRAMディスクを使用していますが、何の違いもありません。 (私はSSDを持っているので、違いはないと思っています)

このプロジェクトのほとんどの単一のC++ファイルは約です。私はVS2005を使用しているため、プロジェクト内の並列化がないので、ひどく思える2秒間のコンパイルを行います。

これをどのように最適化できますか?プロファイリングなしで最適化しないでください。しかし、コンパイラーをプロファイルするにはどうすればいいですか?

注:これらは本当に便利ではなかった。


)私はかなりいくつかのファイルがここよりその5秒かかることがわかりそうすれば、いくつかのも、10秒:それは単一のファイルにかかった時間が表示されます

良いコメントを追加しましょう:テンプレートがたくさんありますか?ファイルの平均サイズはどれくらいですか?必要なヘッダーの最小値のみを含めてチェックしましたか?

いいえ、私はしませんでした。私は当然のことながら(もちろんそうであろう)。私は何かを見つけることができるかもしれませんが、それはすべて投機試行錯誤です!

"Everybody"は、測定/プロファイリング後に最適化する必要があると言いますが、コンパイル時間を最適化すると、試行&にエラーが戻っていますか?


注:の最新のコンパイル時間:提案__TIME__とコメントから「ハック」少なくともないのVisual-C++でない仕事、(the docs状態など)を行いますので、現在のソースファイル。時刻は、hh:mm:ssという形式の文字列リテラルです。 - 私はこのスタンプでシングルコンパイル単位のタイミングを取得することはできますが、コンパイル単位にドリルダウンすることはできません。

+0

テンプレートがたくさんありますか?ファイルの平均サイズはどれくらいですか?必要最小限のヘッダーだけを含めてチェックしましたか? – stefan

+0

プリコンパイル済みヘッダーを使用していますか? –

+0

@MartinBa "必要最低限​​のヘッダーだけを含む"というのは試行錯誤ではなく、良い習慣です。ファイルの平均サイズについて:コンパイラはすべてを解析する必要があるので、明らかにファイルのサイズによって与えられる性能限界があります。変更されたファイルだけが再コンパイルされる増分ビルドシステムをお勧めします。次に、長いコンパイル時間について心配する必要はありません。 – stefan

答えて

2

SysInternals ProcMonは、選択したプロセスによって実行されたすべてのI/Oを表示します。発生したタイムスタンプとフルパスが表示されます。

+0

Hmmm ... VC++でこれを行うのは難しいようです...私は 'devenv。 exe'だが、これは 'cl.exe'を(私が思ういくつかの中間手段を介して)生成するだろう。 VSビルドでこれを試したことがありますか? –

+0

プロセスモニタには非常に柔軟なフィルタがあります。実行可能なプロセスと一致するフィルタを設定できます。実行中のプロセスのPIDを使用する必要はありません。 – Weeble

2

、コンパイル時間を最適化するには、いくつかの方法があります。

  • は、プリコンパイル済みヘッダーを使用してください。 Visual C++を使用する場合は、 "stdafx.h"を使用してください。デフォルトでは、 "stdafx.h"はプリコンパイルされたヘッダーに設定されていますが、これを確認することをお勧めします。

  • Linuxを使用してください:)。あなたがやっていることのためにWindowsを使う必要がないなら、私はLinuxを使うことをお勧めします。コンパイル時間はかなり良いです。理由のいくつかは次のとおりです。ext4は平均でNTFSより約40%高速で、より優れたプロセススケジューラを備えています。プロセッサーの操作に関しては、Linuxは通常x1.8〜x2倍速く、コンパイルはプロセッサーに依存します。

  • 別のコンパイラを使用してください。 Clang/LLVMはコンパイル速度が向上していることが知られており、プリコンパイル済みヘッダーもサポートしています。

+0

* Visual C++を使用する場合は、 "stdafx.h"を使用する場合は、すべてのヘッダーを入れてください。* - 悪いアドバイス。 **すべての**ヘッダーは確かに 'stdafx.h'に入れたいものではありません(そして、選択された共通ヘッダーのために使用しています) –

+0

これはMicrosoftによって推奨されています... –

+0

MSはこれをお勧めしません。 *すべての*ヘッダー?参考にしてください。 –

関連する問題