Das Ausführen von .exe das Vorhandensein der Debug.WriteLine() Effekte Leistung 8x.
Wie kann eine Debug-Anweisung die Leistung nicht im Debug-Modus beeinflussen?
Wie kann ich eine Debug nicht Auswirkungen .exe Leistung haben?
counterRequals ist nach referenziert, so dass es nicht einfach überspringen kann.
Dies ist, wenn es über 1 Milliarde Mal getroffen wird.Debug.WriteLine, die nicht Debug-Leistung bewirkt
if (innerInnerLoopCount > 1 && r == innerInnerLoopCount)
{
counterRequals++;
Debug.WriteLine("");
}
'Debug-Mitglieder haben ihnen die [ConditionalAttribute] (http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute.aspx) zugewiesen, so dass sie in' Release nicht vorhanden sind 'Modus. Es hört sich so an, als würden Sie den 'Debug'-Build ohne den Debugger ausführen. Wenn Sie die 'Debug'-ähnliche Funktionalität benötigen, sollten Sie stattdessen die Klasse [Trace] (https://msdn.microsoft.com/en-us/library/system.diagnostics.trace (v = vs.110) .aspx) verwenden Sie werden möglicherweise Perf-Probleme mit 1 Milliarde Treffer treffen. Könnte [EventSource] berücksichtigen (https://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource.aspx) – keyboardP
Nur weil Sie nicht debuggen bedeutet nicht, dass Sie nicht kompilieren im Debug-Modus. Haben Sie im Debug- oder Release-Modus kompiliert? – sstan
Der Operator && ist teuer, wenn der Ausdruck des linken Operators schlecht vorhersehbar ist, kann die Verzweigungsvorhersage den Vorgang bis zu etwa 5 Mal so langsam machen. Multiplizieren Sie das mit einer Milliarde und Sie haben ungefähr 2 Sekunden, um nichts Nützliches zu tun. Tausche die Operanden aus. Und * tu * bevorzuge die schnelle Version, die überhaupt keine Verzweigung verwendet: 'if (r == innerInnerLoopCount & innerInnerLoopCount> 1)' –