2009-08-13 9 views
11

Wenn eine .pdb-Datei (Programm-Debug-Datei) in einer .dll-Datei enthalten ist, werden Zeilennummern im Stack-Trace einer ausgelösten Ausnahme angezeigt. Beeinflusst dies die Leistung der Anwendung?Machen .pdbs eine Freigabeanwendung langsamer?


Diese Frage ist nicht über Release vs. debug, das heißt Optimierungen. Es geht um die Auswirkungen von .pdb-Dateien auf die Leistung. Werden die PDB-Dateien jedes Mal gelesen, wenn eine Ausnahme ausgelöst wird? Werden die Informationen in irgendeiner Weise zwischengespeichert, wenn die Assemblys geladen werden? Oder wird es beim ersten Mal zwischengespeichert, wenn eine relevante Ausnahme ausgelöst wird? Wie viel Unterschied macht es?

Antwort

13

John Robbins schrieb darüber in seinem Artikel Do PDB Files Affect Performance?. Die einfache Antwort ist nein (wenn Sie Ihre Version mit den beiden Schaltern/optimize + und/debug kompilieren):

Das könnte auf anderen Betriebssystemen, aber nicht Windows zutreffen. Wenn Sie glauben, dass dies der Fall ist, warum erstellt Microsoft dann jedes einzelne Produkt, das mit PDB-Dateien ausgeliefert wird, sowohl für Debug- als auch für Release-Builds? Sie haben den Compiler geschrieben, sie haben den Linker geschrieben, und sie haben das Betriebssystem geschrieben, damit sie genau wissen, was die Effekte sind. Microsoft hat mehr Menschen auf Leistung als jedes andere Softwareunternehmen in der Welt konzentriert. Wenn es irgendwelche Auswirkungen auf die Leistung geben würde, würden sie es nicht tun. Zeitraum. Leistung ist nicht das einzige bei Microsoft, es ist alles.

Zusätzlich:

Wenn gebaut/optimize + und A/Debug-Schalter, ein DebuggingMode.IgnoreSequencePoints an die Debuggableattribute übergeben den JIT-Compiler zu sagen, dass es nicht die PDB-Datei laden muss in Um die IL korrekt zu JIT zu setzen.

Er hat auch einen anderen Artikel mit dem Titel PDB Files: What Every Developer Must Know, die auch eine gute Lektüre ist.

6

Nicht normalerweise. PDBs und Optimierungen sind orthogonal. Einer kann unabhängig vom Wert der anderen Option aktiviert werden. Es kann jedoch die Leistung verringern, wenn Sie die in PDB enthaltenen Informationen tatsächlich verwenden möchten, z. B. wenn Sie auf die StackTrace einer Ausnahme zugreifen und die Leitungsnummern von PDB abrufen müssen oder wenn Sie new StackTrace(true) anrufen.

Übrigens hat Eric Lippert eine related blog entry about compiler optimizations.

+0

Was meinst du 'nicht normal'? Wann wird es einen Effekt haben? Ich verstehe auch nicht, wie die Tatsache, dass man sowohl PDBs haben als auch Optimierungen aktivieren kann, die Frage beantwortet. –

+0

Ich erwähnte den speziellen Fall, ich denke, es könnte die Leistung beeinträchtigen: wenn Sie Informationen von ihm suchen müssen, wie Sie eine Stack-Trace erstellen. Der Compiler kann identische IL erzeugen, ob eine PDB erzeugt wird oder nicht, und es ist dem JIT-Optimierer auch egal, ob PDB vorhanden ist oder nicht, um seine Optimierungen zu ermöglichen. Wenn also der generierte Maschinencode identisch ist, gibt es keinen Grund, dass die Existenz eines PDB die Leistung reduzieren würde. –

Verwandte Themen