Frage

Wann sollte ich PDB-Dateien für eine Produktionsversion einschließen?Soll ich das verwenden? Optimize code Flag und wie würde sich das auf die Informationen auswirken, die ich von einer Ausnahme erhalte?

Wenn es einen spürbaren Leistungsvorteil gibt, würde ich die Optimierungen nutzen wollen, aber wenn nicht, hätte ich lieber genaue Debugging-Informationen.Was wird normalerweise für eine Produktions-App getan?

War es hilfreich?

Lösung

Wenn Sie Quelldateinamen und Zeilennummern in Ihren Stacktraces sehen möchten, generieren Sie PDBs mit der Option „pdb-only“.Die Optimierung ist von der PDB-Generierung getrennt, d. h.Sie können optimieren Und Generieren Sie PDBs ohne Leistungseinbußen.

Aus die C#-Sprachreferenz

Wenn Sie /debug:full verwenden, beachten Sie, dass /debug:full einen gewissen Einfluss auf die Geschwindigkeit und Größe des JIT-optimierten Codes und einen geringen Einfluss auf die Codequalität hat.Wir empfehlen /debug:pdbonly oder kein PDB zum Generieren des Release-Codes.

Andere Tipps

Um Ihre erste Frage zu beantworten: Sie müssen PDBs für eine Produktionsversion nur dann einschließen, wenn Sie Zeilennummern für Ihre Ausnahmeberichte benötigen.

Um Ihre zweite Frage zu beantworten: Die Verwendung des Flags „Optimieren“ mit PDBs bedeutet, dass alle „Stack-Zusammenbruch“ wird im Stack-Trace angezeigt.Ich bin mir nicht sicher, ob die tatsächlich gemeldete Zeilennummer falsch sein kann – dies bedarf weiterer Untersuchungen.

Um Ihre dritte Frage zu beantworten: Mit einem ziemlich cleveren Trick können Sie das Beste aus beiden Welten haben.Die Hauptunterschiede zwischen dem Standard-Debug-Build und dem Standard-Release-Build bestehen darin, dass beim Ausführen eines Standard-Release-Builds die Optimierung aktiviert ist und keine Debug-Symbole ausgegeben werden.Also in vier Schritten:

  1. Ändern Sie Ihre Release-Konfiguration, um Debug-Symbole auszugeben.Dies hat praktisch keine Auswirkungen auf die Leistung Ihrer App und ist sehr nützlich, wenn (wann?) Sie einen Release-Build Ihrer App debuggen müssen.

  2. Kompilieren Sie mit Ihrer neuen Release-Build-Konfiguration, d. h. mit Debug-Symbole und mit Optimierung.Beachten Sie, dass 99 % der Codeoptimierung vom JIT-Compiler und nicht vom Sprachcompiler durchgeführt wird.

  3. Erstellen Sie im Ordner Ihrer App eine Textdatei mit dem Namen xxxx.exe.ini (oder dll oder was auch immer), wobei xxxx der Name Ihrer ausführbaren Datei ist.Diese Textdatei sollte zunächst wie folgt aussehen:

    [.NET Framework Debugging Control]
    GenerateTrackingInfo=0
    AllowOptimize=1
    
  4. Mit diesen Einstellungen läuft Ihre App mit voller Geschwindigkeit.Wenn Sie Ihre App debuggen möchten, indem Sie die Debug-Verfolgung aktivieren und möglicherweise die (CIL-)Codeoptimierung deaktivieren, verwenden Sie einfach die folgenden Einstellungen:

    [.NET Framework Debugging Control]
    GenerateTrackingInfo=1
    AllowOptimize=0 
    

BEARBEITEN Laut Cateyes Kommentar: Dies kann auch in einer gehosteten Umgebung funktionieren wie ASP.NET.

Es besteht keine Notwendigkeit, sie in Ihre Distribution aufzunehmen, aber Sie sollten sie auf jeden Fall erstellen und behalten.Andernfalls ist das Debuggen eines Crash-Dumps praktisch unmöglich.

Ich würde auch Optimierungen einschalten.Obwohl es das Debuggen erschwert, sind die Leistungssteigerungen je nach Art der Anwendung in der Regel nicht trivial.Wir sehen bei einigen Algorithmen leicht eine über 10-fache Leistung bei Release- und Debug-Builds.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top