Wygląda na to, że byłoby idealne (pod względem czytelności) użycie na przykład Debug.WriteLine
, aby pisać na wyjściu zamiast na tonie instrukcji #if DEBUG
.C# Czy instrukcje debugowania są kompilowane podczas pracy w trybie Release?
Gdy program jest kompilowany w trybie zwolnienia, czy cały narzut z numerem Debug.WriteLine
znika, jakby go nie było, lub czy funkcja jest nadal wywoływana, ale nic nie dzieje się wewnętrznie?
Jeśli tak, to czy istnieje sposób uzyskania tej funkcji w klasie niestandardowej, tj. Połączenie statyczne byłoby kompilowane tylko wtedy, gdy jesteśmy w trybie debugowania?
Nie jest to odpowiedź, ale nawet jeśli nie wiesz o atrybucie warunkowym i wprowadzisz całą metodę do #v oraz debugowania, zostanie ona zoptymalizowana. http://stackoverflow.com/questions/11783/in-net-will-empty-method-calls-be-optimized-out –
@mootinator: Cóż, to nie to samo. Z 'Coditional' wszystko jest wyrzucane w czasie kompilacji. Przy pustej metodzie JITter musi jeszcze analizować rzeczy w czasie wykonywania, zmniejszając w ten sposób wydajność. W każdym razie niewiele. W ten sposób JITter nigdy nie zobaczyłby tej metody. –
Należy pamiętać, że jeśli wykonasz jakąś szaloną konkatenację ciągów przed przekazaniem jej do Debug.Write/WriteLine, twoja konkatenacja ciągów zostanie uwzględniona w twojej kompilacji wydania. Jeśli umieścisz logikę konkatenacji wewnątrz funkcji, zostanie ona usunięta. Więc możesz zrobić konkatencję łańcuchową jak: Debug.WriteLine (DoHugeStringCalculation()); ..w przeciwnym razie możesz użyć #if DEBUG wokół tego wszystkiego. –