2011-02-14 14 views
6

Ho un po 'di enigma qui. Ho cercato di accelerare una determinata funzione, ora quando eseguo la mia applicazione ci vogliono ~ 16-17 secondi per eseguire questa funzione.Perché il mio codice è più veloce quando si esegue con Performance Analysis?

Ora, se eseguo lo stesso funzionamento con Performance Analysis in parallelo con VS2010, per trovare le sezioni più lente, il codice viene eseguito in ~ 6-7 secondi. Ora, se il mio codice fosse eseguito velocemente, sarebbe perfettamente accettabile per l'applicazione.

Ho provato a eseguire il codice (senza analisi perf) tramite entrambi i profili di debug e di rilascio, con poca o nessuna differenza.

Qualcuno ha qualche idea su cosa potrebbe accadere qui?

Alcune note: la funzione in questione utilizza molto LINQ to SQL e l'analisi delle prestazioni sta usando Sampling CPU.

+0

Heisenbug. Ricevi gli stessi 16-17 secondi se compili in modalità di rilascio (rispetto al debug)? – Robaticus

+0

E hai eseguito il programma al di fuori di VS? Semplicemente eseguendo un programma in VS con il debugger allegato si disabilitano molte ottimizzazioni jitter. – CodesInChaos

+0

Robaticus, sì (come affermato). CodeInChaos - Io noto una grande differenza tra fuori e dentro VS, sì, ma me lo aspettavo. –

risposta

4

Credo che si dovrebbe concentrarsi sulle parti più lente del codice e ottimizzarle comunque se si identifica ciò che richiede più tempo rispetto alle altre parti, non si cura della durata assoluta in secondi, ma si pensi solo in termini relativi.

Anche se si vede che l'intera applicazione viene eseguita in 7 secondi, se ci sono metodi che impiegano il 40% di tutto questo tempo tenta di ottimizzarli, sicuramente si approfitterà di questa messa a punto anche senza Performance Analysis abilitata e il totale il tempo di esecuzione diminuirà ancora di più se inizialmente fosse di circa 17 secondi.

+0

+1 per il consiglio, si potrebbe meglio spendere tempo per ottimizzare la ricerca del perché la differenza di tempo. –

+0

Ebbene sì, ma il problema era che è perfettamente ottimizzato "all'interno" dell'analisi ma non all'esterno. –

1

Vedete molte dll caricate mentre inserite la funzione nel caso dell'analisi di non prestazione? Mi chiedo se l'inserimento di questa funzione stia causando il caricamento di molte DLL, che nel caso dell'analisi delle prestazioni sono già state caricate in precedenza.

+0

Non proprio, no - o almeno niente di originale –

+0

Aggiungi istruzioni di traccia alla tua funzione con una data e ora e cerca di restringere il punto in cui avviene il rallentamento, da dove provengono i 16-17 secondi, controlla l'ora prima di scrivere la funzione chiama, e subito quando entri, sii liberale in questo momento, perché sembra che tu debba fare la tua analisi delle prestazioni alla vecchia maniera. –

+0

Bene, sono riuscito a individuare il problema e l'ho risolto, ma la domanda era diretta a "perché" si è verificato il problema piuttosto che a come aggirare un problema. –

Problemi correlati