2012-03-05 9 views
5

Quando si utilizza dotTrace, devo scegliere una modalità di profilazione e un metodo di misurazione del tempo. Profiling modes sono:dotTrace: quali impostazioni di profiling dovrei utilizzare per la mia app desktop?

  • Tracing
  • linea per linea
  • campionamento

E time measurement methods sono:

  • tempo parete di tempo (contatore di prestazioni)
  • Discussione
  • Tempo di parete (istruzione CPU)

Il tracciamento e la linea per linea non possono utilizzare la misurazione del tempo di filettatura. Ma questo mi lascia ancora con sette combinazioni diverse da provare. Ora ho letto le pagine di aiuto di DotTrace su queste oltre una dozzina di volte, e non sono più informato di come ho iniziato a scegliere quale scegliere.

Sto lavorando a un'app WPF che legge documenti Word, estrae tutti i paragrafi e gli stili e quindi scorre il contenuto estratto per selezionare le sezioni del documento. Sto cercando di ottimizzare questo processo. (Al momento ci vuole più di un'ora per completare, quindi cerco di profilarlo per un determinato periodo di tempo anziché fino a quando non termina.)

Quali tipi di misurazione del profilo e del tempo mi darebbero i migliori risultati? O se la risposta è "Dipende", allora da cosa dipende? Quali sono i pro e i contro di una data modalità di profiling o di un metodo di misurazione del tempo?

+1

Inoltre, quando deve essere scelta "Alta precisione"? Perché non dovresti * scegliere * questo? – usr

risposta

6

tipi profilatura:

  • campionamento: più veloce, ma meno preciso dei profili-tipo, in testa minima profiler. Sostanzialmente equivalente alla sospensione del programma molte volte al secondo e alla visualizzazione dello stacktrace; quindi il numero di chiamate per metodo è approssimativo. Ancora utile per identificare i colli di bottiglia delle prestazioni a livello di metodo.

    istantanee catturate in modalità di campionamento occupano molto meno spazio su disco (direi 5-6 meno spazio.) Usa per la valutazione iniziale o quando il profilo di una lunga durata di applicazione (che suona come il vostro caso.)

  • Tracciatura: registra la durata di ciascun metodo. L'analisi in fase di profiling viene eseguita più lentamente, ma in cambio, dotTrace mostra il numero esatto di chiamate di ciascuna funzione e le informazioni sulla sincronizzazione delle funzioni sono più accurate. Questo è utile per immergersi nei dettagli di un problema a livello di metodo.

  • Riga per riga: consente di definire il programma in base alla riga. Il maggior numero di risorse, ma la maggior parte dei risultati di profilazione a grana fine. Rallenta il programma modo verso il basso. La tattica preferita qui è quella di profilare inizialmente usando un altro tipo, e quindi selezionare manualmente le funzioni per il profiling line-by-line.


Per quanto riguarda i tipi metri, penso che siano descritti abbastanza bene in Getting started with dotTrace Performance dal grande Hadi Hariri.

tempo a muro (CPU Instruction): Questo è il modo più semplice e veloce per misurare il tempo a muro (vale a dire, il tempo osserviamo su un orologio da parete). Tuttavia, su alcuni processori multi-core precedenti potrebbe produrre risultati errati a causa della desincronizzazione dei timer dei core. In tal caso, si consiglia di utilizzare per il contatore delle prestazioni.

tempo a muro (Performance Counter): I contatori delle prestazioni fa parte della API di Windows e permette prelievo di campioni di tempo in modo indipendente dall'hardware. Tuttavia, essendo una chiamata API, ogni misura richiede un tempo sostanziale di e pertanto ha un impatto sull'applicazione profilata.

Tempo di filettatura: In un'applicazione concatenata multi-thread i thread concorrono al reciproco tempo di parete. Per evitare tali interferenze, è possibile utilizzare il misuratore del tempo di thread che effettua chiamate API di sistema per ottenere la quantità di tempo specificata dallo scheduler del sistema operativo sul thread. Gli svantaggi sono che l'acquisizione dei tempi di thread è molto più lenta rispetto all'utilizzo del contatore CPU e la precisione è limitata anche dalle dimensioni di utilizzate dallo scheduler dei thread (normalmente 10 ms). Questa modalità è supportata solo quando il tipo di profilo è impostato su Sampling

Tuttavia non differiscono troppo.


Io non sono un mago in profilatura me stesso, ma nel tuo caso mi piacerebbe iniziare con il campionamento per ottenere un elenco di funzioni che richiedono assurdamente lunghi da eseguire, e poi li avevo marchio per la linea-by linea di profilazione.

+0

Ho migliorato questa domanda in modo da poterla usare come riferimento per il futuro, ho sempre fatto confusione tra i tempi di Wall. –

Problemi correlati