2008-12-03 54 views
12

我一直在做周圍使用System.Diagnostics.Debug的一些性能測試,似乎涉及到靜態類發行的結構是建立在調試被完全刪除所有代碼。我想知道編譯器如何知道這一點。也許有一些類或配置屬性可以準確指定該行爲。刪除代碼構建在.NET

我想創建,我想完全釋放配置中刪除一些調試代碼,我在想,如果我能做到這一點,就像Debug類,其中簡單地改變配置參數刪除代碼。

回答

19

您可以將ConditionalAttribute屬性與字符串「DEBUG」一起應用於任何方法,並且對該項目的調用將僅存在於DEBUG構建中。

這不同於使用的#ifdef方法,因爲這可以讓你通過其他人在他們的調試配置發佈使用方法(如在.NET Framework中的Debug類的方法)。

+0

不知道,這可能會派上用場! – Stormenet 2008-12-03 15:10:49

+1

這正是我所希望的,因爲它是可定製和可擴展的。 – Curro 2008-12-03 15:40:44

16

Visual Studio中定義了一個DEBUG常數調試配置,你可以使用這個包,你不想在你的發佈版本中執行的代碼:

#ifdef DEBUG 
    // Your code 
#endif 

但是,您也可以裝飾的方法與條件屬性,這意味着該方法將永遠不會被稱爲非調試版本(方法以及任何調用點將會從裝置中取出):

[Conditional("DEBUG")] 
private void MyDebugMethod() 
{ 
    // Your code 
}