2012-07-02 7 views
7

Se si dispone dell'applicazione WPF e per scopi di debug ci sono messaggi che vengono visualizzati sulla console. Ciò influirà sulle prestazioni dell'applicazione quando è configurata come applicazione Windows e non viene visualizzata alcuna console?Console.WriteLine è un collo di bottiglia nelle applicazioni Windows?

+6

Bene, per scopi di debug perché non utilizzare Debug.WriteLine? Esce nella finestra "Output", ma può essere reindirizzato alla finestra immediata tramite le opzioni di Visual Studio se non sbaglio. – erodewald

+0

Misuralo e lo saprai di sicuro :-) –

+0

Domanda simile per asp.net, non garantisce che la risposta sia la stessa: http://stackoverflow.com/questions/137660/where-does-console-writeline-go-in-asp-net –

risposta

5

Il vero collo di bottiglia in Console.WriteLine() sta effettivamente scrivendo sulla console. Quale è davvero costoso, in particolare quando è necessario scorrere la console. C'è anche un notevole overhead nel processo di hosting di Visual Studio che cattura l'output quando non c'è console e lo visualizza invece nella finestra Output.

Nessuno dei due ha un ruolo dopo aver distribuito l'app. Ma sì, tutte le chiamate al metodo sono state fatte e le stringhe vengono formattate, cade solo nel pozzetto nell'ultimo momento in cui la funzione API di Windows rileva che non ci sono console.

Se la tua app è accettabile per il momento, quando esegui il build di Debug, non preoccuparti. Se vedi meno di stellar perf nella build di Release senza un debugger e pensi che potrebbe essere causato da Console.WriteLine() quindi non esitare a Search + Sostituiscilo a Debug.Print().

2

Un collo di bottiglia implica che è il punto più lento nel codice. Non possiamo saperlo se non sappiamo tutto il resto che stai facendo.

C'è qualche impatto sulle prestazioni, sì, probabilmente. Non sta facendo nulla, sta facendo qualcosa. Sarà sufficiente essere il collo di bottiglia per il tuo programma, ne dubito fortemente. Sarà sufficiente per avere anche un impatto notevole, è possibile, ma improbabile. Tutto dipende da cos'altro sta facendo il tuo programma e quanto stai scrivendo alla console (Dovrebbe essere abbastanza per iniziare a notare il tempo necessario.)

Come è stato menzionato nel commenti, è possibile utilizzare Debug.WriteLine anziché Console.WriteLine in modo da poter vedere l'output durante il debug, ma quando si compila la build Release non stamperà tali istruzioni.

0

Fare qualcosa richiede sempre più tempo del non fare niente.

L'atto di scrivere del testo su una console NULL non dovrebbe essere un grande successo in termini di prestazioni, ma quello che stai passando come parametri e in quale volume potrebbe essere.

Misurare le prestazioni effettive con e senza l'output della console per verificare personalmente se il modello di utilizzo rientra nelle tolleranze accettabili.

Debug.WriteLine() potrebbe essere una scelta migliore in base ai requisiti, poiché questi verranno automaticamente esclusi durante la creazione di Release.

0

Cercare di creare e ottimizzare il proprio framework di registrazione è raramente l'approccio migliore.

Hai guardato qualcosa come log4net? È possibile configurare vari appendici, inclusa la registrazione alla console. È inoltre possibile creare appendici asincroni per ridurre realmente il sovraccarico di registrazione.

Erick