Ihre Meinung? Ja, ja. Während Sie sich entscheiden, ob Sie einen Profiler kaufen sollen oder nicht, Versuchen Sie dies .
HINZUFÜGEN: @Max: Schritt-für-Schritt-Anleitung: Die IDE hat eine Schaltfläche "Pause". Führen Sie Ihre Anwendung unter der IDE aus, und während sie subjektiv langsam ist, d.h. während Sie darauf warten, drücken Sie den "Pause"-Button. Dann erhalten Sie einen Schnappschuss des Aufrufstapels.
Um einen Schnappschuss des Aufrufstapels zu machen, zeige ich ihn an (das ist eines der Debug-Fenster). In den IDE-Optionen können Sie festlegen, was in der Stack-Ansicht angezeigt werden soll. Ich schalte die Option zur Anzeige der Funktionsargumente aus, weil das die Zeilen zu lang macht. Ich interessiere mich für die Zeilennummer, in der der Aufruf stattfindet, und den Namen der aufgerufenen Funktion. Dann kann man in der Ansicht des Aufrufstapels "Alles markieren" und dann "Kopieren", um es dann in Notepad einzufügen. Ich weiß, das ist etwas umständlich, aber ich habe sie immer von Hand aufgeschrieben.
Ich nehme auf diese Weise einige Proben. Dann schaue ich nach Zeilen, die in mehr als einer Probe vorkommen, denn das sind die Zeitfresser. Einige sind einfach notwendig, wie z. B. "call main", aber andere nicht. Das sind die Goldnuggets. Wenn ich keine finde, nehme ich immer wieder Proben, bis zu etwa 20. Wenn ich dann immer noch keine finde (was sehr ungewöhnlich ist), ist das Programm bereits ziemlich gut optimiert. (Ein wichtiger Punkt ist, dass das Programm jedes Mal, wenn Sie dies tun, schneller wird, und dabei werden die verbleibenden Leistungsprobleme relativ größer und leichter zu finden. D.h. das Programm wird nicht nur um ein bestimmtes Verhältnis R schneller, sondern die verbleibenden Probleme werden prozentual um das gleiche Verhältnis größer.)
In diesem Prozess frage ich mich auch, was das Programm in dieser Probe macht und warum. Das "Warum" ist sehr wichtig, denn so kann man feststellen, ob eine Zeile wirklich notwendig ist oder durch etwas weniger Kostspieliges ersetzt werden könnte. Wenn ich mir nicht sicher bin, warum eine Zeile da ist, gehe ich ein wenig in Einzelschritten vor, schaue mir vielleicht die Daten an oder lasse das Programm ein paar Stufen zurückgehen (Umschalt-F11), bis ich verstehe, was es tut. Das war's dann auch schon.
Bestehende Profiler könnten bei diesem Prozess helfen, wenn sie tatsächlich Stapelproben nehmen, die Proben aufbewahren, die Linien danach ordnen, wie viel Prozent der Proben sie enthalten, und es dann ermöglichen, einzelne Proben im Detail zu untersuchen. Vielleicht werden sie das irgendwann tun, aber im Moment tun sie es nicht. Sie sind mit Themen wie Effizienz und Messung beschäftigt.
*Angenommen, Ihr Code verbringt 90 % seiner Zeit mit X und 9 % seiner Zeit mit Y, beides nicht wirklich notwendig. Nehmen Sie eine kleine Anzahl von Stichproben, und Sie werden X sehen, aber wahrscheinlich nicht Y. Wenn Sie X beheben, erhalten Sie eine 10-fache Beschleunigung. Führen Sie die Abtastung erneut durch (möglicherweise müssen Sie eine äußere Schleife um das Programm legen, damit Sie Abtastungen vornehmen können). Jetzt sehen Sie Y mit Sicherheit, denn jetzt dauert es 9% x 10x = 90%. Durch die Korrektur erhalten Sie eine weitere 10-fache, insgesamt also eine 100-fache Beschleunigung.