2016-07-31 46 views
0

運行.exe Debug.WriteLine()效果性能8x的存在。
調試語句如何影響性能而不是在調試?
我怎樣纔能有一個調試不影響.exe性能?
counterRequals被引用後,它不能跳過。
這個if命中超過10億次。Debug.WriteLine影響非調試性能

if (innerInnerLoopCount > 1 && r == innerInnerLoopCount) 
{ 
    counterRequals++; 
    Debug.WriteLine(""); 
} 
+6

'Debug'成員已將[ConditionalAttribute](http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute.aspx)分配給它們,因此它們不會出現在'Release '模式。這聽起來像你正在運行沒有調試器的'Debug'版本。如果您需要像調試一樣的功能,請考慮使用[Trace](https://msdn.microsoft.com/en-us/library/system.diagnostics.trace(v = vs.110).aspx)類,你可能會遇到10分鐘點擊量的性能問題。可以考慮[EventSource](https://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource.aspx) – keyboardP

+3

僅僅因爲你不調試並不意味着你沒有編譯在調試模式下。你是否在Debug或Release模式下編譯? – sstan

+1

如果左運算符表達式預測不好,則&&運算符非常昂貴,分支預測失敗會使運算速度降低約5倍。乘以十億,你有大約2秒沒有用處。交換操作數。並且* do *更喜歡不使用分支的快速版本:'if(r == innerInnerLoopCount&innerInnerLoopCount> 1)' –

回答

1

Debug成員有ConditionalAttribute分配給它們,從而它們將不會在Release模式存在。這聽起來像你正在運行Debug版本沒有調試器。如果您需要類似功能的調試,請考慮使用Trace class來代替,儘管您可能會遇到10分鐘點擊的性能問題。如果是這樣的話,你可以看看EventSource這可以允許高性能日誌記錄。