2008-10-28 21 views
7

In che modo la profilatura è diversa dalla registrazione?In che modo la profilatura è diversa dalla registrazione?

E 'solo che il profiling viene utilizzato per le misurazioni delle prestazioni per vedere quanto tempo impiega ciascuna funzione? O sono fuori?

In genere, come vengono utilizzate le librerie di profilatura?

Quali tipi di statistiche si ottengono profilando?

risposta

20

La registrazione indica che è accaduto quello. È ottimo per la medicina legale e il debugging.

Il profilo quantifica che: indica quanto tempo è stato speso il codice in ciascuna area o quante volte è stato eseguito un codice di codice. Ti aiuta a migliorare le prestazioni del tuo codice.

Il profilo funziona normalmente a livello di una riga di codice, una chiamata di funzione o talvolta un file. Per ogni livello, che in genere può dire:

  • Quante volte è stato eseguito l'unità. In genere è meno importante ottimizzare il codice usato raramente rispetto al codice che esegue milioni di volte. Un'eccezione è il codice che fa in modo che un utente (o un altro processo) attenda il suo completamento.

  • Quante volte un ramoè stata presa, dicono in un comunicato if o switch. Di nuovo, di solito ti preoccupi di più sull'ottimizzazione del codice usato spesso.

  • Quanto tempo è stato spesoin una particolare funzione. Attenzione: anche gli sviluppatori esperti sono spesso sorpresi da questi risultati. È molto difficile prevedere dove sono i tuoi "tempi".

  • Quanto tempo è stato speso in una funzione e tutte le funzioni chiamate all'interno di tale funzione. Forse non è la funzione in sé, ma i suoi figli, che hanno bisogno di essere ottimizzati.

  • Quante volte l'unità è stato chiamato da ciascun chiamante.Potresti scoprire che una particolare funzione è chiamata principalmente da un luogo inaspettato.

Armati con i dati di un buon profiler, è possibile ottenere miglioramenti significativi nelle prestazioni con uno sforzo relativamente ridotto.

1

Vedo il profiling come misurazione delle prestazioni, e non è necessario profilare ogni pezzo di codice in esecuzione, a volte è meglio indirizzare aree specifiche.

La registrazione sta memorizzando informazioni per un uso successivo, informazioni che possono riguardare la profilazione ma non necessariamente. Potrebbe essere solo per registrare cosa è successo.

Tutto il materiale di profilazione che ho mai usato in pratica consente di archiviare un'ora di inizio e di fine per una "transazione" e in seguito di manipolare i dati per vedere cosa impiega più tempo.

1

La registrazione sta registrando ciò che viene fatto a scopo di controllo o risoluzione dei problemi. Il profiling, direi, è la tecnica per misurare le prestazioni. La profilazione può essere eseguita registrando le metriche delle prestazioni, oppure può essere eseguita utilizzando strumenti specializzati o utilità per esaminare lo stato di un sistema mentre è in esecuzione.

2

Il profilo viene utilizzato per determinare l'efficienza del tempo di esecuzione di un programma. Può essere usato per misurare l'utilizzo della memoria o l'utilizzo della CPU. Puoi usarlo per ottimizzare il tuo codice.

L'accesso all'altra è una funzione di controllo. Vuoi vedere cosa ha fatto il programma mentre era in esecuzione. È più utilizzato per il debugging delle prestazioni.

1

dichiarazioni di registro di solito sono scritti nel codice sorgente stessa, mentre con profiling è possibile modificare il codice dopo che è stato compilato ed è strumentato allora e solo per una sessione di profilatura (vale a dire, non c'è codice profiling presente in qualsiasi versione della build stessa.) e misurare le prestazioni in tempo reale o può essere campionato in modo che possa tenere traccia delle prestazioni in un modo meno granulare ma meno intrusivo.

3

Il profilo riguarda la determinazione delle prestazioni rispetto alle chiamate di funzione/metodo, ad es.

  • Il tempo trascorso nelle funzioni
  • Tempo trascorso in funzioni + il tempo trascorso in funzioni figlio
  • Numero di volte che una particolare funzione viene chiamata

L'intera idea di profilazione è sempre una buona panoramica di un sistema per determinare dove possono essere fatte le ottimizzazioni. Se sai che una particolare funzione è chiamata 20 volte più della seconda funzione più conosciuta, sai quando concentrare i tuoi sforzi di ottimizzazione.

Ti mostra anche dove non trascorrere il tuo tempo. Non si desidera trascorrere una giornata per ottimizzare una funzione che viene chiamata solo una volta all'ora. Si desidera concentrare il proprio tempo sull'ottimizzazione di quelle funzioni chiamate più volte al secondo.

La registrazione, a mio avviso, tiene semplicemente traccia di ciò che è stato chiamato (ma senza i metadati dettagliati associati a ciascuna chiamata).

Le librerie di profiling come Rational Quantify funzionano strumentando il codice per raccogliere le statistiche mentre è in esecuzione. Ciò avrà un impatto implicito sulle prestazioni, ma sarà relativo in tutto il sistema.

1

Registrazione indica come molte domande che hai inviato a StackOverflow.

Profiling ti dice quanto tempo che serve per inviare ogni domanda, e quanto molto della vostra giornata di lavoro che vi si trascorre.

1

Le risposte precedenti sono corrette.

Tuttavia, IMHO, i profiler sono più fumo che pistole, e scommetto che questo fa sì che alcune frecce vengano cliccate.

Se si desidera sapere per quanto tempo una funzione è responsabile, è necessario conoscere sia il numero di volte che viene chiamato sia il tempo necessario per la chiamata. Uno di questi senza l'altro è inutile.

Anche se ti dice entrambi, non ti dice quali istruzioni all'interno della funzione sono responsabili per il tempo. Ti raccontano molte cose, come i call call commentati e quant'altro, ma è ancora sotto forma di molti indizi su cui devi raggirare, rendendo le tue ipotesi più "informate".

Quindi si parla di quanto "accurate" siano le cifre. Fa una bella presentazione, ma non risolve il problema.

Quello che potevano fare (e non lo fanno) è punto in particolare le dichiarazioni o le istruzioni e dire

Questa precisa affermazione proprio qui, se si potesse sbarazzarsi di esso, si potrebbe salvare X % del tempo di esecuzione totale.

e ordinare quelli da X.

Se avete veramente bisogno di risolvere un problema di prestazioni, questo è quello che ti serve, e si può facilmente ottenere da soli. Guardate qui:
                How to Optimize your Program's Performance

Problemi correlati