Ich bin ein wenig verwirrt darüber, wie man die .NET Trace und Debug Klassen benutzt.
Warum sollten Sie Trace anstelle von Debug verwenden?
%Vor%Ich verstehe auch, dass Debug-Anweisungen ignoriert werden, wenn Sie sich im Konfigurationsmodus "Release" befinden, aber wenn Trace-Anweisungen die ganze Zeit gelten, wie wirkt sich dies auf die Leistung aus?
Auf der einfachsten Ebene haben sie verschiedene Kompilierungsschalter - dh Debug.WriteLine
etc wird nur umgeschaltet, wenn Sie das DEBUG
Kompilierungssymbol haben (nicht üblich für Release Builds), wobei Trace.WriteLine
normalerweise gerade enthalten ist in Release-Builds.
Die Route Trace
verfügt über anpassbare Trace-Listener, die über die Konfiguration geladen werden können; Debug
wird im allgemeinen als Listener an einen Debugger übergeben. Natürlich gibt es 3rd-Party-Trace-Systeme, die viel mehr Flexibilität bieten.
Sie können mit einem Compiler-Schalter unabhängig voneinander ein- und ausschalten. Wenn Sie die Build-Seite Ihrer Projekteigenschaften aufrufen, haben Sie dort einige Kontrollkästchen.
Die Faustregel für mich ist, dass ich debuggen für tatsächliche Debugging-Informationen, dh der Wert der Variable x an diesem Punkt ist ... etc, und Trace für die Verfolgung von Ablauf der Kontrolle durch meine App (mehr Spam wie).
Trace-Aufrufe werden nur ausgeführt, wenn Sie sich im Freigabemodus befinden. Das Kompilieren im Freigabemodus hat einige Leistungsvorteile, die Sie möglicherweise in der Endanwendung haben möchten, und es kann andere Gründe geben, den Freigabemodus zu aktivieren. Es kann jedoch vorkommen, dass Sie Informationen zur Trace-Konsole aufzeichnen möchten, die mit Anwendungen wie SysInternals DbgView . Dies sind normalerweise Nachrichten, die Sie nicht unbedingt an eine Protokollausgabe senden möchten oder die Sie immer für Debugzwecke zur Verfügung haben möchten, selbst wenn der Benutzer die Protokollierung deaktiviert hat.
Sie möchten sicherlich nicht viele Informationen an die Trace-Konsole senden, da dies zu einer Leistungseinbuße führt, aber einige wichtige Informationen könnten angebracht sein.
Ich habe Trace (mit einem zugehörigen TraceSwitch) für Logging-Bemühungen in Release-Umgebungen verwendet - eine schnelle Optimierung der app.config kann dann verschiedene Protokollebenen ohne Neukompilierung geben (was ein Problem verursachen könnte) geh sowieso weg) oder die Notwendigkeit, einen Debugger anzuhängen. Besonders praktisch für Probleme, die nur auf Kundenrechnern auftreten, egal aus welchem Grund. Ich habe dies verwendet, um die Abmeldung aus einer FTP-Klasse (im alten Framework 1.1) zu verhindern, um Probleme bei der Netzwerkübertragung zwischen zwei Unternehmen zu diagnostizieren >