Frage

Ich versuche, die Leistung meiner Anwendung abzustimmen. Und ich bin gespannt, welche Methoden der längsten einnehmen, zu verarbeiten und somit für alle Optimierungsmöglichkeiten sahen über werden soll.

Gibt es bestehende kostenlose Tools, die mir den Call-Stack visualisieren helfen und wie lange jedes Verfahren abgeschlossen ist, nehmen? Ich denke, etwas, das den Call-Stack als gestapelte Balkendiagramm zeigt oder einen treemap so ist es einfach, dass sehen MethodA () nahm 10 Sekunden abgeschlossen werden, da es MethodB () genannt und -Methode (C) , das dauerte 3 und 7 Sekunden abzuschließen.

Ist so etwas wie dieses gibt es?

War es hilfreich?

Lösung

Ja, sie sind Performance Profiler genannt. Schauen Sie sich RedGate ANTS und JetBrains' DotTrace, nicht kostenlos, aber ziemlich billig und viel besser als jede freie Alternative, die ich gesehen habe.

Andere Tipps

Mehrere Profilometer zur Verfügung. Ich bin nur vertraut mit einer (der in Visual Studio Team Suite enthalten), aber es ist nicht frei. Ich muss sagen, es mächtig / zuverlässig genug gewesen ist, dass ich keine Lust hatte, zu versuchen, eine andere wechseln. Das andere Ich habe gehört, über ist Red Gate .NET Profiler (auch nicht kostenlos). Beide haben Feature-Sets einschließlich, aber definitiv nicht darauf beschränkt, was Sie nach. Wenn dies für die kommerzielle Anwendung Entwicklung ist, auf jeden Fall überprüfen Sie sie heraus. :)

Die Möglichkeit, dies gemessen wird, ist entweder durch Instrumentierung oder Probennahme in einem Profiler.

Instrumentation

Besetzung hat die grobe Entsprechung all Ihren Code neu zu schreiben, Folgendes zu tun:

public void Foo()
{
   //Code
}

in

public void Foo()
{
   InformTheProfilingCodeThatFooStarted();
   //Code
   InformTheProfilingCodeThatFooEnded();
}

Da der Profiler weiß, wann alles startet und stoppt kann es einen Stapel verwaltet werden, wenn thisngs starten und stoppen und diese Informationen liefern später. Viele können Sie diese auf einer Linie Ebene tun (durch viel das gleiche tun, aber noch mehr vor jeder Zeile instrumentiert.

Dies wird Ihre 100% genaue Informationen über die ‚Call Graph‘ in Ihrer Anwendung tut dies aber auf Kosten. Verhindern inlining von Methoden und das Hinzufügen von erheblichen Aufwand zu jedem Methodenaufruf

Sampling

Ein alternativer Ansatz ist Sampling.

Anstatt zu versuchen, 100% genau Anruf Graphen zu erhalten, aber mit weniger als genauem tatsächlichen mal diesem Ansatz funktioniert, statt auf der Grundlage, dass, wenn es in regelmäßigen Abständen überprüfen, was in Ihrer Anwendung gehe auf es kann Ihnen eine gute Vorstellung davon, wie viel Zeit sepnds es in verschiedenen Funktionen, ohne tatsächlich so viel Mühe Ausarbeiten zu verbringen. Die meisten Sampling-Profilometer wissen, wie man ‚analysieren‘ den Call-Stack, wenn sie das Programm unterbrechen, so dass sie nach wie vor eine vernünftige Vorstellung davon geben können, was ruft die Funktion und wie viel Zeit dies scheint zu nehmen, aber Sie werden nicht in der Lage sein zu sagen, ob dies (sagen wir) 10 Anrufe an Foo (), das tat zehn Anrufe Bar () oder ein Aufruf an Foo (), die in einem Aufruf Bar war (), die gerade passiert so lange dauern sie 10-mal abgetastet wurde.

Beide Ansätze haben ihre Vor- und Nachteile und andere Probleme zu lösen. Im Allgemeinen ist die Sampling-Methode der beste mit dem ersten zu starten, da es weniger invasiv ist und somit sollte genauere Informationen geben, was ist die Zeit nehmen, , die häufig ist die wichtigste erste Frage vor dem Training warum .

Ich kenne nur eine freie Sampling-Profiler für .NET-Code, der die freie verteilbare Profiler ist, die mit dem VS 2008 Team System Release verknüpft ist (aber die separat heruntergeladen werden kann). Die resultierende Ausgabe kann nicht einfach mit irgendetwas gesehen werden, aber der (sehr teuer) Team System Edition von Visual Studio.

Red Gate ANTS nicht Sampling unterstützen (zu diesem Zeitpunkt), JetBrains (DotTrace) und MS Visual Studio Team System haben Profilometer, die beide Stile unterstützen. Die Sie auf einer Kosten-Nutzen-Basis bevorzugen ist eine Frage der Stellungnahme.

Dies ist die Methode, die ich verwenden. Wenn Sie ein IDE mit einer Pause-Taste haben es nichts kostet und funktioniert sehr gut.

Was es Ihnen sagt, ist in etwa, was% der Wandtaktzeit in jeder Routine ausgegeben wird, genauer gesagt, in jeder Aussage. Das ist wichtiger als die durchschnittliche Dauer der Routine oder Anweisung ausführen, weil es automatisch in dem Aufruf Zahl Faktoren. Durch Abtasten Wandtaktzeit beinhaltet automatisch CPU, IO, und andere Arten von Systemzeit.

Noch mehr wichtig ist, wenn man sich die Proben sehen, in der Ihre Routine auf dem Call-Stack ist, kann man nicht nur sehen, was es tut, aber Warum . Der Grund, dass wichtig ist, ist das, was Sie wirklich suchen ist Zeit damit verbracht wird, die mit etwas schneller ersetzt werden könnte. Ohne die „Warum“ Informationen, müssen Sie erraten, was das ist.

BTW: Diese Technik ist wenig bekannt vor allem, weil Professoren es nicht lehren (auch wenn sie es weiß), weil sie selten mit monströser Software arbeiten muß, wie wir in der realen Welt haben, so dass sie behandeln gprof als Grundlage Paradigma die Profilierung.

Hier ist ein Beispiel, es zu benutzen.

P. S. Erwarten Sie die Prozente zu viel addieren mehr als 100%. Die Art und Weise über die Prozent zu denken ist, wenn eine Anweisung Routine auf dem Stack X% der Zeit ist (wie aus einer kleinen Anzahl von Proben geschätzt), dass etwa ist, wie viel wanduhr Zeit schrumpfen wird, wenn die Anweisung oder Routine gemacht werden kann, viel weniger Zeit in Anspruch nehmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top