2009-08-13 9 views
11

.pdb(プログラムデバッグ)ファイルが.dllに含まれている場合、スローされた例外のスタックトレースに行番号が表示されます。これはアプリケーションのパフォーマンスに影響しますか?.pdbsはリリースアプリケーションの速度を低下させますか?


この質問は、リリース対デバッグの最適化ではありません。これは、.pdbファイルを持つことによるパフォーマンスの影響に関するものです。例外がスローされるたびに.pdbファイルが読み込まれますか?アセンブリがロードされたときに情報が何らかの形でキャッシュされていますか?または、関連する例外が最初にスローされたときにキャッシュされますか?どれくらいの違いがありますか?

答えて

13

John Robbinsはこの記事について、彼の記事Do PDB Files Affect Performance?に書いています。単純な答えはnoです(/ optimize +と/ debugスイッチの両方でリリースビルドをコンパイルする場合)。

これは他のオペレーティングシステムでは当てはまるかもしれませんが、Windowsではそうではありません。そう思っているのであれば、Microsoftはデバッグとリリースのビルドの両方でPDBファイルを使用して出荷するすべての単一製品をビルドするのはなぜですか?彼らはコンパイラを書いてリンカを書いて、オペレーティングシステムを書いて彼らはその効果が正確に分かるようにしました。マイクロソフトでは、世界中の他のソフトウェア企業よりもパフォーマンスに重点を置く人々が増えています。パフォーマンスに何らかの影響があった場合、それは実行されません。期間。 Microsoftだけではパフォーマンスだけではありません。すべてです。

さらに:

/最適化+およびA/debugスイッチを内蔵した場合、DebuggingMode.IgnoreSequencePointsは、それがでPDBファイルをロードする必要はありませんJITコンパイラを伝えるためにDebuggableAttributeに渡され、 ILを正しくJITするために必要です。

また、別の記事、PDB Files: What Every Developer Must Knowもあります。

6

通常ではありません。 PDBと最適化は直交しています。 1つは、他のオプションの値に関係なく有効にすることができます。ただし、例外のStackTraceにアクセスしていて、PDBから回線番号を取得する必要がある場合やnew StackTrace(true)に電話する場合など、PDBに含まれる情報を実際に使用する場合は、パフォーマンスが低下する可能性があります。

ところで、Eric Lippertはrelated blog entry about compiler optimizationsです。

+0

「通常ではない」とはどういう意味ですか?効果はいつありますか?また、私は、PDBを持ち、最適化を可能にすることが問題にどのように答えることができないのか分からない。 –

+0

パフォーマンスに影響する可能性がある特定のケースについて言及しました。スタックトレースを構築するときに情報を参照する必要がある場合です。コンパイラは、PDBが生成されているかどうかにかかわらず、同一のILを生成することができ、JITオプティマイザはPDBがその最適化を可能にするかどうかを気にしません。結果として、生成されたマシンコードが同一である場合、PDBの存在が性能を低下させる理由はない。 –

関連する問題