2008-12-03 12 views
12

Przeprowadziłem testy wydajności dotyczące użycia System.Diagnostics.Debug i wydaje się, że cały kod związany z klasą statyczną Debugowanie zostaje całkowicie usunięte po zbudowaniu konfiguracji Release . Zastanawiałem się, jak kompilator to wie. Może jest jakiś atrybut klasy lub konfiguracji, który pozwala dokładnie określić to zachowanie.Usuwanie kodu z wersji kompilacji .NET

Próbuję utworzyć kod debugowania, który chcę całkowicie usunąć z konfiguracji Release, i zastanawiałem się, czy mógłbym to zrobić tak jak klasa Debug, w której po prostu zmiana parametrów konfiguracyjnych powoduje usunięcie kodu.

Odpowiedz

19

Możesz zastosować atrybut ConditionalAttribute, z ciągiem "DEBUG" do dowolnej metody, a wywołania do tego elementu będą obecne tylko w kompilacjach DEBUG.

To różni się od użycia metody #ifdef, ponieważ pozwala to na udostępnienie metod używanych przez inne osoby w ich konfiguracjach DEBUG (takich jak metody klasy Debug w środowisku .NET).

+0

Nie wiedziałem, że może się przydać! – Stormenet

+1

Dokładnie tego oczekiwałem, ponieważ można go dostosowywać i rozszerzać. – Curro

16

Visual Studio definiuje stały diagnostycznym dla konfiguracji Debug i można to wykorzystać, aby owinąć kod, który nie ma w swoim wykonaniu kompilacji Release:

#ifdef DEBUG 
    // Your code 
#endif 

jednak można również ozdobić metodę z atrybutem warunkowy, co oznacza, że ​​metoda nie zostanie wywołana dla non-debug buduje (sposób i każde wezwanie-sites zostanie usunięty z zespołu):

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

Metody warunkowe nigdy nie zwrócą niczego poza pustką ... –

+0

Dzięki za edycję Pop - tęskniłem za tym w moim pośpiechu! –