Тот же ответ, что и ---
РЕДАКТИРОВАТЬ: @Steve предложил, чтобы я дал менее содержательный ответ.
Я слышу это все время - "Я хочу выяснить , где моя программа тратит свое время".
Позвольте мне предложить альтернативную формулировку - «Я хочу выяснить , почему моя программа тратит свое время».
Может быть, разница не очевидна.
Когда программа выполняет инструкцию, причина , почему делает это, кодируется во всем состоянии программы, включая стек вызовов.
Смотреть только на счетчик программ - все равно что пытаться понять, нужна ли поездка на такси, профилируя угол поворота колес.
Вам нужно посмотреть на все состояние программы.
Есть еще один миф, который я слышу все время: вам нужно измерить время выполнения методов, чтобы найти «медленные».
У программ есть много способов занять больше времени, чем нужно, скажем, с помощью линейного поиска вместо двоичного поиска в каком-либо методе, что может быть тем, о чем люди думают.
Способ думать об этом таков:
- Не просто одна вещь занимает больше времени, чем необходимо. Вероятно, их несколько.
- Каждая вещь, требующая времени, требует некоторой доли, такой как 10%, 50%, 90% или какое-то подобное число. Это означает, что если настенные часы можно будет остановить в течение этого времени, это будет меньше времени, которое может занять все приложение.
- Вы хотите узнать, что это за вещи, какими бы они ни были. Профилировщики (сэмплеры) работают, беря много мелких выборок (ПК или стек вызовов) и суммируя их для получения измерений. Но измерения не то, что вам нужно. Вам нужно выяснить, что делает, с точки зрения времени. Лучше взять небольшое количество образцов, например, 10 или 20, и изучить (не суммировать) их. Если какая-то активность занимает 20%, 50% или 90% времени, то это вероятность того, что вы поймете ее в действии по каждой выборке, так что это примерно процент выборок, на которых вы ее увидите. Важно выяснить, что это, а не получить точное измерение чего-то не относящегося к делу.
Чтобы посмотреть, что делает программа, с точки зрения времени, вот как много людей делают это .