Sembra che sarebbe ideale (in termini di leggibilità) utilizzare dire Debug.WriteLine
per scrivere sull'output anziché su una tonnellata di istruzioni #if DEBUG
.C# Le istruzioni di debug vengono compilate durante l'esecuzione in modalità di rilascio?
Quando il programma è compilato in modalità di rilascio, tutto il sovraccarico con lo Debug.WriteLine
scompare come se non esistesse, o la funzione è ancora chiamata, ma nulla è fatto internamente?
Se è così, c'è un modo per ottenere questa funzionalità su una classe personalizzata, cioè una chiamata statica verrebbe compilata solo se siamo in modalità Debug?
Non una risposta, ma anche se non si conosceva l'attributo condizionale e si inserisce l'intero metodo in e #if debug, si otterrebbe l'ottimizzazione. http://stackoverflow.com/questions/11783/in-net-will-empty-method-calls-be-optimized-out –
@mootinator: Beh, non è lo stesso. Con 'Coditional' tutto viene buttato fuori al momento della compilazione. Con il metodo vuoto, JITter deve ancora analizzare le cose in runtime, riducendo così le prestazioni. Non molto ma comunque. In questo modo, invece, JITter non vedrebbe mai questo metodo di chiamata. –
Ricorda che se esegui qualche pazzesca concatenazione di stringhe prima di passarla a Debug.Write/WriteLine, la concatenazione di stringhe sarà inclusa nella build di rilascio. Se inserisci la tua logica di concatenazione all'interno della funzione, questa verrà eliminata. Quindi potresti fare la tua stringa concat in questo modo: Debug.WriteLine (DoHugeStringCalculation()); ..altrimenti puoi usare #if DEBUG attorno a tutto. –