Domanda

Ho un'applicazione winforms che normalmente si trova a circa il 2-4% di CPU. Stiamo riscontrando alcuni picchi fino al 27% della CPU per un numero limitato di volte. Qual è il miglior strumento di profilazione per determinare cosa sta effettivamente causando questo picco. Usiamo dottrace ma non vedo come mapparlo esattamente ai picchi della CPU?

Apprezzo l'aiuto

È stato utile?

Soluzione

Ho già usato 2 strumenti di profilazione: il profiler ANTS di RedGate e il profiler incorporato trovato in Visual Studio Team System.

È da un po 'di tempo che non uso RedGate ( http: // www. red-gate.com/products/ants_profiler/index.htm ) profiler, sebbene di recente abbia usato il built-in in Visual Studio 2008.

Detto questo, ho sentito che il prodotto RedGate sembrava più intuitivo da usare. Una cosa che mi ha frustrato quando ho usato il prodotto RedGate è che non sono stato in grado di istruire il profiler a profilare il mio codice solo a partire da un certo punto - ho avuto un colpo di prestazione che non è stato possibile raggiungere fino a quando non è stata ottenuta una discreta quantità di codice già eseguito e quindi inquinato i miei risultati. Da allora potrebbero aver aggiunto quella funzione.

La versione integrata per Visual Studio è disponibile solo nelle versioni di fascia molto alta del prodotto. Qualcuno mi corregga se sbaglio, ma non credo nemmeno il "Professionale" la versione ha il profiler. Attualmente sto utilizzando Team System Developer Edition, che possiede dispone degli strumenti di analisi del codice.

Una cosa che la versione VS fa, tuttavia, è consentirti di mettere in pausa la creazione del profilo e persino avviare la tua app con la creazione di profili in pausa, in modo da poter davvero concentrarti sulle prestazioni di qualcosa di molto specifico. Questo può essere estremamente utile quando stai cercando di capire i risultati dell'analisi.

EDIT: entrambi gli strumenti mostreranno l'utilizzo della memoria, il numero di volte in cui è stato chiamato un metodo specifico e quanto tempo è stato impiegato in ciascun metodo. Ciò che non fanno, per quanto ne so, è mostrarti l'utilizzo della CPU in un dato momento. Tuttavia, ci sono probabilmente forti correlazioni tra l'utilizzo della CPU e la quantità di tempo trascorso in un determinato blocco di codice.

Se riesci a duplicare costantemente i picchi della CPU invocando determinate azioni nell'APP, allora quello che farei è provare a mettere le mani sul profiler VS, avviare l'app con una pausa di profilazione, abilitare la profilazione proprio prima di fare qualsiasi cosa in genere provoca il picco ed esamina tali risultati.

Ciò presuppone ovviamente che abbiate una sorta di comportamento deterministico per ricreare i picchi. In caso contrario ... potresti considerare i processi thread o garbage collection un candidato per il tuo hit delle prestazioni.

Altri suggerimenti

Ho trovato DevPartner di Compuware http://www.compuware.com/ per essere un eccellente strumento di profilazione. Purtroppo al momento sembra che non supportino VS 2008.

Inoltre, questo picco è davvero preoccupante? E su che tipo di hardware stai vedendo questo? Un picco al 27% su una CPU quad-core potrebbe essere motivo di preoccupazione, ma non su un P3 a 800 MHz.

Quanto tempo rimane a spillo? @Matt ha un grande punto che la raccolta dei rifiuti potrebbe essere in errore. O potenzialmente scambiando su disco.

Influisce sulle prestazioni complessive del sistema per molto tempo o solo un paio di secondi ogni tanto?

Non che trovare una soluzione a questo non dovrebbe preoccupare, ma quanto è importante?

Puoi anche imparare molto sulla tua applicazione con Sysinternal Process Explorer e Perfmon (come fa il picco su un GC).

Il migliore che ti mostrerà i picchi e ti permetterà di approfondire per vedere cosa lo sta causando sono gli strumenti Xperf / Xperfview.

Guarda http://msdn.microsoft.com/en-us/performance/cc825801. aspx

e http://msdn.microsoft.com/en-us/library/cc305221. aspx

questi strumenti si basano sulla tecnologia ETW (Event Tracing per Windows), che offre una visione estremamente accurata di ciò che sta accadendo per il processo e per l'intero sistema.

Questi strumenti consentono anche di acquisire tracce per l'analisi post mortem e anche di collegare / scollegare funzionalità. Spero che questo aiuti.

Se l'app è a thread singolo, il miglior strumento di profilazione è il tuo IDE.

Aggiunto: forse è ovvio, ma l'utilizzo percentuale della CPU non è un concetto molto chiaro. Quando il tuo programma è in esecuzione, è al 100%. Quando non lo è, è allo 0%. Quindi le percentuali parziali devono essere basate su una sorta di integrale di smoothing nel tempo. Tuttavia, qualunque cosa sia, stai vedendo un picco. Alcuni profiler ti fanno entrare in un tale picco e analizzano solo quell'intervallo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top