Wie unterscheidet sich das Profiling von der Protokollierung?

7

Wie unterscheidet sich Profiling von Protokollierung?

Wird das Profiling nur für Leistungsmessungen verwendet, um zu sehen, wie lange jede Funktion dauert? Oder bin ich dran?

Wie werden Profiling-Bibliotheken normalerweise verwendet?

Welche Arten von Statistiken werden durch Profilerstellung erhalten?

    
Brian R. Bondy 28.10.2008, 03:30
quelle

8 Antworten

20

Logging sagt dir was passiert ist. Es ist ideal für Forensik und Debugging.

Das Profiling quantifiziert das: Es sagt Ihnen, wie viel Zeit Ihr Code in jedem Bereich verbracht hat oder wie oft ein Code ausgeführt wurde. Es hilft Ihnen, die Leistung Ihres Codes zu verbessern.

Das Profiling funktioniert normalerweise auf der Ebene einer Codezeile, eines Funktionsaufrufs oder manchmal einer Datei. Für jede Stufe kann es normalerweise sagen:

  • Wie oft wurde die Einheit ausgeführt? Es ist im Allgemeinen weniger wichtig, selten verwendeten Code zu optimieren als Code, der millionenfach ausgeführt wird. Eine Ausnahme ist Code, der einen Benutzer (oder einen anderen Prozess) warten lässt, bis er abgeschlossen ist.

  • Wie oft ein Zweig verwendet wurde, z. B. in einer if oder switch Anweisung. Auch hier geht es Ihnen normalerweise am meisten darum, oft verwendeten Code zu optimieren.

  • Wie viel Zeit für in einer bestimmten Funktion ausgegeben wurde . Warnung: selbst erfahrene Entwickler sind oft von diesen Ergebnissen überrascht. Es ist sehr schwer vorherzusagen, wo deine Zeit liegt.

  • Wie viel Zeit in einer Funktion und allen in dieser Funktion aufgerufenen Funktionen verbracht wurde . Vielleicht ist es nicht die Funktion selbst, sondern ihre Kinder, die optimiert werden müssen.

  • Wie oft wurde die Einheit von jedem Aufrufer aufgerufen. Sie können feststellen, dass eine bestimmte Funktion in erster Linie von einem unerwarteten Ort aufgerufen wird.

Bewaffnet mit den Daten eines guten Profilers können Sie mit relativ geringem Aufwand oft signifikante Leistungsverbesserungen erzielen.

    
Adam Liss 28.10.2008, 03:33
quelle
3

Bei der Profilerstellung geht es darum, die Leistung in Bezug auf Funktions- / Methodenaufrufe zu ermitteln, z. B.

  • Zeit in Funktionen verbracht
  • Zeitaufwand für Funktionen + Zeitaufwand für Kinderfunktionen
  • Anzahl der Aufrufe einer bestimmten Funktion

Die ganze Idee der Profilerstellung erhält einen guten Überblick über ein System, um festzustellen, wo Optimierungen vorgenommen werden können. Wenn Sie wissen, dass eine bestimmte Funktion 20 Mal häufiger aufgerufen wird als die zweithäufigste aufgerufene Funktion, wissen Sie, wann Sie Ihre Optimierungsbemühungen fokussieren müssen.

Es zeigt Ihnen auch, wo nicht Sie Ihre Zeit verbringen. Sie möchten nicht einen Tag damit verbringen, eine Funktion zu optimieren, die nur einmal pro Stunde genannt wird. Sie möchten Ihre Zeit darauf konzentrieren, diejenigen Funktionen zu optimieren, die mehrmals pro Sekunde genannt werden.

Logging verfolgt nach meinem Verständnis nur das, was aufgerufen wurde (aber ohne die detaillierten Metadaten, die jedem Aufruf zugeordnet sind).

Profiling-Bibliotheken wie Rational Quantify arbeiten, indem sie den Code instrumentieren, um Statistiken während der Ausführung zu sammeln. Dies hat zwar Auswirkungen auf die Leistung implizit, ist jedoch systemweit relativ.

    
LeopardSkinPillBoxHat 28.10.2008 03:37
quelle
2

Das Profiling wird verwendet, um die Laufzeit-Effizienz eines Programms zu bestimmen. Es kann verwendet werden, um die Speichernutzung oder CPU-Auslastung zu messen. Sie können damit Ihren Code optimieren.

Logging andererseits ist eine Auditing-Funktion. Sie möchten sehen, was das Programm während seiner Ausführung gemacht hat. Es wird mehr zum Debuggen als zur Leistung verwendet.

    
Vincent Ramdhanie 28.10.2008 03:34
quelle
1

Ich sehe Profiling als Leistungsmessung, und Sie müssen nicht jedes einzelne laufende Programm profilieren. Manchmal ist es besser, auf bestimmte Bereiche zu zielen.

Die Protokollierung speichert Informationen für die spätere Verwendung, Informationen, die sich auf Profilerstellung beziehen können, aber nicht unbedingt. Es kann nur sein, zu protokollieren, was passiert ist.

All das Profiling-Zeug, das ich je benutzt habe, erlaubt es im Grunde, eine Start- und Endzeit für eine 'Transaktion' zu speichern und später die Daten zu manipulieren, um zu sehen, was am meisten Zeit kostet.

    
paxdiablo 28.10.2008 03:32
quelle
1

Die Aufzeichnung protokolliert, was zum Zweck der Überwachung oder Fehlerbehebung getan wurde. Profiling, würde ich sagen, ist die Technik der Leistungsmessung. Profilerstellung kann durch Protokollieren von Leistungsmesswerten erfolgen, oder mithilfe spezieller Tools oder Dienstprogramme, um den Status eines laufenden Systems zu überprüfen.

    
Dave Markle 28.10.2008 03:32
quelle
1

Log-Anweisungen werden normalerweise im Quelltext selbst geschrieben, während Sie mit Profilerstellung den Code nachträglich ändern können es ist kompiliert und ist dann instrumentiert und nur für eine Profiling-Sitzung (dh es gibt keinen Profiling-Code in any Version des Builds selbst.) und messen die Leistung in Echtzeit oder es kann gesampelt sein, um die Leistung auf weniger granulare, aber weniger aufdringliche Weise zu verfolgen.

    
Mark Cidade 28.10.2008 03:34
quelle
1

Logging zeigt Ihnen, wie viele Fragen Sie an stackoverflow gestellt haben.

Profiling sagt Ihnen, wie lang es dauert, um jede Frage zu veröffentlichen, und wie viel von Ihrem Arbeitstag, den Sie hier verbringen.

    
Adam Liss 28.10.2008 11:05
quelle
1

Die vorherigen Antworten sind richtig.

Aber IMHO, Profiler sind mehr Rauch als Waffen, und ich wette, dies bewirkt, dass einige Pfeile angeklickt werden.

Wenn Sie wissen möchten, wie viel Zeit eine Funktion hat, müssen Sie wissen, wie oft sie aufgerufen wird und wie lange sie dauert, bis sie aufgerufen wird. Einer von diesen ohne den anderen ist nutzlos.

Auch wenn es Ihnen beides sagt, sagt es Ihnen nicht, welche Anweisungen innerhalb der Funktion für die Zeit verantwortlich sind. Sie erzählen Ihnen viele Dinge, wie annotierte Anrufgraphen und was auch immer, aber es ist immer noch in Form von vielen Hinweisen, über die Sie rätseln müssen, damit Ihre Vermutungen "informierter" klingen.

Dann reden sie darüber, wie "genau" die Figuren sind. Macht eine schöne Präsentation, aber nicht das Problem.

Was sie könnten tun (und sie nicht), zeigen Sie auf bestimmte Aussagen oder Anweisungen und sagen Sie

  

Diese genaue Aussage hier, wenn Sie es loswerden könnten, würde Sie X% der gesamten Ausführungszeit sparen.

und sortieren Sie diese mit X.

Wenn Sie wirklich ein Leistungsproblem beheben müssen, brauchen Sie es, und Sie können es leicht selbst beschaffen. Schau hier:
So optimieren Sie die Leistung Ihres Programms

    
Mike Dunlavey 04.11.2008 21:00
quelle

Tags und Links