same answer as:
Re-edited: Sie gefragt, was waren Ihre Möglichkeiten. Wenn Ihr Herz auf Profiling eingestellt ist, dann suchen Sie nach einem Profiler.
Auf der anderen Seite, wenn Sie tatsächlich ein Leistungsproblem zu finden haben, funktioniert die einfache Methode genauso gut oder besser als fast jeder Profiler. Ich sage fast jeder, denn in einigen Profilern kann man tatsächlich herausholen, was man wissen muss, nämlich die Zeitkosten, die einzelnen Anweisungen, insbesondere Anrufanweisungen, zuzuschreiben sind.
Der Zeitaufwand einer Anweisung ist die Zeit, die gespeichert würde, wenn die Anweisung entfernt werden könnte, und eine gute Schätzung davon ist der Bruchteil der Aufrufstapelabtastwerte, die sie enthalten. Sie müssen diesen Bruch nicht mit hoher Genauigkeit schätzen.Wenn die Instruktion auf 5 von 10 Proben angewendet wird, liegen die Kosten wahrscheinlich irgendwo zwischen 45% und 55%. Egal - wenn Sie es loswerden könnten, würden Sie seine Kosten sparen.
So ist es nicht schwer, Leistungsprobleme zu finden. Nehmen Sie einfach eine Reihe von Call-Stack-Samples, sammeln Sie die Instruktionen für diese Samples und sortieren Sie die Instruktionen nach dem Bruchteil der Samples, die sie enthalten. Unter den High-Fraction-Befehlen befinden sich einige, die Sie optimieren können, und Sie müssen nicht raten, wo sie sind.
Ich vereinfache etwas, weil es oft hilfreich ist, mehr Zustandsinformationen als nur den Aufruf-Stapel zu untersuchen, um zu sehen, ob einige Arbeit wirklich notwendig ist. Aber ich hoffe, der Punkt ist gemacht.
Menschen äußern Zweifel, dass es in der Gegenwart von Rekursion funktionieren könnte, oder arbeiten an großen Programmen. Ein kleiner Gedanke (und Experimente) zeigt, dass diese Einwände nicht stichhaltig sind.
Hinweis VS 2008 stehen Profiler allein Kommandozeile Laden, dass der freie ein für * Speicher * Zuweisung Verfolgung aber gerade perf Analyse es die anderen Systeme eigentlich sehr gut ist spuren. Keine freien, die ich kenne, unterstützen Mixed-Mode-Profiling oder Sampling statt Instrumentierung. AQTime und das Team-System machen das beide – ShuggyCoUk
Ich habe gerade diese dotTrace-Demo ausprobiert. Ich hatte gehofft, es wäre nicht das, was ich erwartet hatte, aber es war so. Es überflutet dich mit wunderschön präsentierten Sachen, die keine Rolle spielen. Was zählt, ist, dass es weit über 90% seiner Zeit im Aufruf von "myBitmap.SetPixel" ausgibt, und der kleine Rest an verschiedenen Stellen, wie einen Strahl mit einer Kugel zu schneiden, wie leicht mit nicht vielen Pausen gezeigt wird. Ich bin in DT herumgereist, aber nichts darin hat mir erzählt, was die Pausen mir erzählt haben. –
@MikeDunlavey: Ich habe nicht wirklich genug Kontext, um diesen Kommentar zu verstehen, aber dotTrace hat sicherlich geholfen, Engpässe in Noda Time zu finden ... –