2011-11-28 5 views
34

Visual Studio 2010'da, bir projenin özelliklerine gidip Oluşturma Sekmesine giderseniz, "TRACE Constant tanımlaması için bir onay kutusu vardır." #define TRACE yapmanın eşdeğeri hangisidir.NET/Visual Studio'da TRACE Constant tanımlayın

Tüm System.Diagnostics.Trace yöntemlerinin çevresinde [Conditional("TRACE")] var.

Soruma neden bunu hiç kapatırdınız? Yani, eğer tanımlanmış herhangi bir izleyici dinleyiciniz yoksa, o zaman bir günlük veya birşeyleri doldurmak gibi değil. Sadece bana garip geliyor. Trace'a çağrı yapmak için çaba harcıyorsanız, neden App/Web.config aracılığıyla kontrol etmemek istiyorsunuz, bunun yerine bir derleyici anahtarıyla kontrol etmek istersiniz. bir derleme.

Bir şey mi eksik? Şüphesiz, bu performans için kötü olamaz, değil mi?

+5

Dinleyici yoksa bile Trace() çağrı ücretsiz değildir. Çok pahalı yapmak zor değil. –

+0

Gerçi yeterince granül olduğunu sanmıyorum. Dağıtımda yalnızca belirli olay türlerini (uyarı, hata) takip etmek isteyebilirsiniz, oysa hata ayıklamada her şeyi (bilgi, ayrıntılı vb.) Isteyebilirsiniz. TRACE_ERROR, TRACE_VERBOSE, vb. Olmalıdır. – luksan

+0

TRACE hakkında daha fazla bilgi ve yapınızı optimize etmek için http://stackoverflow.com/questions/6911863/setting-up-ac-sharp-application-for-max-performance-build adresine bakın. . – MBentley

cevap

27

Muhtemelen bu onay kutusu /define:TRACE derleyici seçeneğine eşdeğerdir. Bir sürüm oluşturma için bu seçeneği kapatmak isteyebilirsiniz. Bunun nedeni, son kullanıcıların bazı nedenlerle (örneğin, güvenlik) izleme çıktısını görmesini istemiyorsanız veya performansı artırmak istememenizdir. Tabii ki, performans artışı açıkken ne kadar iş yapıldığına bağlı olacaktır, ancak Conditional attribute, derleyicinin oluşturulan IL'den işlev çağrısını (herhangi bir dize biçimlendirmesi de dahil olmak üzere) tamamen kaldırmasına neden olacaktır, böylece anlamlı bir fark yaratıyor.

+1

Fonksiyon çağrısı tamamen kaldırıldıysa, çağrı no-op ile değiştirilmek yerine tamamıyla kesilir mi? İkincisi, bunun yerine ILA'ya yerleştirilmiş bir NOP alacağınız gibi geliyor, ancak bağlantılı MSDN sayfası bunu önermiyor. – Ashe

+2

Teşekkürler, haklısınız (Jon Skeet'in yanıtı [bu iş parçacığının] alt kısmında onaylanmıştır (http://bytes.com/topic/c-sharp/answers/237540-conditional-debug-if-debug)). Cevabımı düzelttim. –