Zazwyczaj w większości przypadków będą to bardziej rozbudowane funkcje, a nie funkcje wywoływane najczęściej miliard razy w pętli.
Podczas profilowania opartego na próbkach (za pomocą narzędzia lub ręcznie) często najczęstsze punkty aktywne będą pojawiać się w małych, liściastych wywołaniach, które wykonują proste czynności, takie jak funkcja porównywania dwóch liczb całkowitych.
Ta funkcja często nie skorzysta z dużej, jeśli w ogóle, optymalizacji. Przynajmniej te granulowane hotspoty rzadko mają najwyższy priorytet. Jest to funkcja wywołująca funkcję liścia, która może być przyczyną problemów, lub funkcja wywołująca funkcję wywołującą funkcję, podobnie jak nieoptymalny algorytm sortowania. Dzięki dobrym narzędziom możesz przechodzić od rozmówcy do rozmówcy, a także zobaczyć, kto spędza najwięcej czasu dzwoniąc do rozmówcy.
Często błędem jest obsesja na punkcie rozmówców i nie patrzenie na osoby dzwoniące na wykresie połączeń w sesji profilowania, chyba że robisz rzeczy bardzo nieefektywnie na poziomie mikro. W przeciwnym razie możesz nadmiernie pocić małe rzeczy i tracić z oczu duży obraz. Samo posiadanie profilera w dłoni nie chroni przed obsesją na punkcie błahych rzeczy. To tylko pierwszy krok we właściwym kierunku.
Musisz także upewnić się, że profilujesz operacje, które są zgodne z czynnościami, które użytkownicy naprawdę chcą robić, w przeciwnym razie bycie całkowicie zdyscyplinowanym i naukowym w swoich pomiarach i testach porównawczych jest bezwartościowe, ponieważ nie jest zgodne z tym, co klienci robią z produktem. Pewnego razu miałem kolegę, który dostroił algorytm podziału, aby podzielić kostkę na miliard aspektów, a on był z tego bardzo dumny ... z wyjątkiem użytkowników, którzy nie dzielą prostych sześciokątów sześciokątnych na miliard aspekty. Cała rzecz zwolniła do pełzania, gdy próbowała uruchomić na produkcyjnym modelu samochodu z ponad 100 000 wielokątów do podzielenia, w którym to momencie nie mogła nawet wykonać 2 lub 3 poziomów podziału bez spowolnienia do pełzania. Mówiąc wprost, napisał kod, który był super zoptymalizowany dla nierealistycznie małych rozmiarów wejściowych, które nie
Musisz zoptymalizować rzeczywiste przypadki użycia zgodne z zainteresowaniami użytkowników, bo inaczej jest to gorsze niż bezwartościowe, ponieważ wszystkie te optymalizacje, które mają tendencję do przynajmniej nieco obniżenia możliwości utrzymania kodu, mają niewielką korzyść dla użytkownika i tylko te wszystkie negatywy dla bazy kodu.