In der Regel handelt es sich in den meisten Fällen um fleischigere Funktionen, nicht um Funktionen, die in einer Schleife milliardenfach aufgerufen werden.
Wenn Sie eine beispielbasierte Profilerstellung durchführen (mit einem Tool oder von Hand), befinden sich die größten Hotspots häufig in winzigen Blattaufrufen, die einfache Aufgaben ausführen, z. B. eine Funktion zum Vergleichen von zwei Ganzzahlen.
Diese Funktion wird oft nicht von viel, wenn überhaupt, Optimierung profitieren. Zumindest haben diese granularen Hotspots selten oberste Priorität. Es ist die Funktion, die diese Blattfunktion aufruft, die möglicherweise den Fehler verursacht, oder die Funktion, die die Funktion aufruft, die die Funktion aufruft, wie ein suboptimaler Sortieralgorithmus. Mit guten Tools können Sie einen Drilldown vom Angerufenen zum Anrufer durchführen und auch sehen, wer am meisten Zeit damit verbringt, den Angerufenen anzurufen.
Es ist oft ein Fehler, von Callees besessen zu sein und Anrufer in einer Profilerstellungssitzung nicht im Anrufdiagramm zu betrachten, es sei denn, Sie erledigen die Dinge auf Mikroebene sehr ineffizient. Andernfalls könnten Sie die kleinen Dinge übermäßig schwitzen und das große Ganze aus den Augen verlieren. Nur einen Profiler in der Hand zu haben, schützt Sie nicht vor Besessenheit über triviale Dinge. Es ist nur ein erster Schritt in die richtige Richtung.
Außerdem müssen Sie sicherstellen, dass Sie Profiling-Vorgänge ausführen, die auf die Dinge abgestimmt sind, die die Benutzer tatsächlich ausführen möchten. Andernfalls ist es wertlos, bei Ihren Messungen und Benchmarks absolut diszipliniert und wissenschaftlich zu sein, da sie nicht mit dem übereinstimmen, was die Kunden mit dem Produkt tun. Ich hatte einmal einen Kollegen, der die Hölle aus einem Unterteilungsalgorithmus herausgestimmt hat, um einen Würfel in eine Milliarde Facetten zu unterteilen, und er war sehr stolz darauf ... außer, dass Benutzer einfache 6-Polygon-Würfel nicht in eine Milliarde unterteilen Facetten. Das Ganze verlangsamte sich zu einem Kriechen, als es versuchte, auf einem Serienautomodell mit über 100.000 zu unterteilenden Polygonen zu laufen. Zu diesem Zeitpunkt konnte es nicht einmal zwei oder drei Unterteilungsebenen ausführen, ohne sich zu einem Kriechen zu verlangsamen. Einfach gesagt, schrieb er Code, der für unrealistisch kleine Eingabegrößen optimiert war, die es nicht taten.
Sie müssen reale Anwendungsfälle optimieren, die auf die Interessen Ihrer Benutzer abgestimmt sind, oder es ist schlimmer als wertlos, da all jene Optimierungen, die die Wartbarkeit von Code zumindest etwas beeinträchtigen, nur einen geringen Nutzen für den Benutzer haben und nur all diese Nachteile für die Codebasis.