Jak sprawdzić, które części kodu są najczęściej uruchamiane?

11

Chciałbym móc zobaczyć, jaki kod w tysiącach wierszy kodu źródłowego jest uruchamiany najczęściej i trwa najdłużej. Miałoby to na celu optymalizację.

Możliwość sprawdzenia, które części kodu są najczęściej uruchamiane, jest ważna dla optymalizacji, ponieważ te części powinny skupić się na przyspieszeniu. W tym samym czasie część kodu jest uruchamiana bardzo często, ale praktycznie nie zajmuje czasu, dlatego ważne jest, aby zobaczyć, który kod zajmuje najwięcej czasu.

Wydaje mi się, że najlepszym z obu światów byłby program, który sumuje czas, jaki zajmuje kawałek kodu, w tym WSZYSTKIE czasy jego uruchomienia (w związku z tym, aby dowiedzieć się, co spowalnia twój kod najbardziej ogólnie). Czy istnieją do tego jakieś narzędzia?

sinθ
źródło
Czy preferujesz system operacyjny lub język programowania?
Mawg mówi o przywróceniu Moniki

Odpowiedzi:

15

To, czego szukasz, to profilowanie :

W inżynierii oprogramowania profilowanie („profilowanie programu”, „profilowanie oprogramowania”) jest formą dynamicznej analizy programu, która mierzy na przykład przestrzeń (pamięć) lub złożoność czasową programu, użycie określonych instrukcji lub częstotliwość i czas trwania wywołań funkcji. Najczęstszym zastosowaniem informacji profilowania jest pomoc w optymalizacji programu.

Istnieje kilka takich aplikacji. Czasami są one wbudowane w samo IDE. Ide Netbeans jest jednym z takich narzędzi, które ma wbudowany profiler . wprowadź opis zdjęcia tutaj

Kolejnym takim narzędziem jest visual vm .

wprowadź opis zdjęcia tutaj

Profile mogą działać na różne sposoby - należy zdawać sobie sprawę z różnic. Jedno podejście to co sekundę, aby zrobić migawkę uruchomionych wątków i zobaczyć, jakie metody są obecnie wywoływane dla każdego wątku. Wykorzystuje to próbkowanie tego, co tam jest.

Drugim podejściem jest instrumentowanie kodu bajtowego java w celu zgłaszania czasu rozpoczęcia i zakończenia do innej aplikacji.

Pisanie profilera nie jest strasznie trudne dla jednej wykwalifikowanej javy. IBM ma artykuł na temat pisania własnego profilera (z kodem źródłowym!). Ten oparty jest na Java Interactive Profiler .

Istnieje wiele profilerów - zarówno darmowych, jak i komercyjnych (co powiesz na profilera podłączonego do działających instancji JVM, które mogą zgłaszać się do ciebie (e-mail lub inne powiadomienie), gdy określone metody przekraczają oczekiwany czas działania? program, który informuje, gdy żądania internetowe trwały zbyt długo - czy profil historyczny tego żądania został zapisany do późniejszej kontroli?). Musisz tylko wiedzieć, czego szukasz, aby je znaleźć i stamtąd.

Po uzyskaniu narzędzia do profilowania przystąpisz do interpretacji wyników profilowania .

Społeczność
źródło