簡單的問題,似乎沒有涵蓋:如果我在我的代碼中使用了很多Debug.WriteLine
語句,他們會完全缺席我的生產版本嗎?VB 2010 Express:debug.WriteLine在調試版本中完全優化了嗎?
我的意思是:編譯器足夠聰明,不會爲這些調用發出任何代碼?或者如果有指令,我是否必須將它們包圍#if DEBUG..#end
?
簡單的問題,似乎沒有涵蓋:如果我在我的代碼中使用了很多Debug.WriteLine
語句,他們會完全缺席我的生產版本嗎?VB 2010 Express:debug.WriteLine在調試版本中完全優化了嗎?
我的意思是:編譯器足夠聰明,不會爲這些調用發出任何代碼?或者如果有指令,我是否必須將它們包圍#if DEBUG..#end
?
Debug類構件標以ConditionalAttribute從而調用點不會被編譯如果構建在Release模式
的頂端如果您在發佈生成項目模式所有的Debug.WriteLine語句都被省略,因爲它們被設置爲DEBUG的ConditionalAttribute裝飾。
這是在編譯時完成的。您可以在使用反編譯器(如.NET Reflector,dotNetPeek)分析程序集時檢查此問題。如果以DEBUG模式構建,則會出現對Debug.WriteLine的調用。如果您在RELEASE模式下構建它,呼叫不存在。
調試類輸出僅在調試配置中起作用。 Trace類在Debug和Release中均可用。所以,你不需要使用#if DEBUG。
我知道這一點。它們在生產版本中沒有影響。問題是,如果這是在運行時或編譯時處理的。 – TheBlastOne
此外,http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute.aspx講述它背後的故事。 – TheBlastOne