Возможно, вы слышали об этом раньше, но есть различие между профилированием ради самого себя и профилированием с целью обеспечения максимально быстрого выполнения кода.
Хорошо, что вы хотите накапливать время на методсуммируется по всем вызовам метода, потому что если вы поделите это на общее время выполнения, вы получите процент времени, за которое отвечает метод.Если есть что-то, что можно исправить, чтобы получить лучшую скорость, это один из методов с высоким процентом в собственном коде.
Даже лучше, чем получение методов с высоким совокупным процентом, это получение строк кода с высоким совокупным процентом.Это потому, что если вы хотите заглянуть внутрь метода, чтобы найти проблему, вы ищете конкретные строки кода с высоким процентом.Поэтому, если ваш профилировщик скажет вам, где находятся эти строки, у вас уже есть (в зависимости от размера метода), возможно, на порядок более высокая точность определения местоположения проблемы.
Даже лучше, чем знать расположение строк вашего кода, чтоимеет высокий процент, зная контекст, в котором они могут быть выполнены.
Одна вещь, которую некоторые считают необходимым, это получить точные измерения времени.Однако, как только вы обнаружите в своем коде строку, которая явно представляет возможность получить хорошее ускорение, потому что удаление-замена-выполнение этого по-другому сэкономит значительный процент общего времени, действительно ли имеет значение, если ваша оценка этого процента не соответствуетнемного?Предположим, вы нашли эту строку и думаете, что она стоит 50%.Если бы реальная фактическая экономия от его исправления составляла всего 30% или 70%, неужели вам не понравилось бы, что вы потратили время на его исправление?
Вот почему я рекомендую выборку из стека, для чего это небольшой пример .
Выборки из стека автоматически дают процент на уровне строки, потому что процентная стоимость строки - это просто процент выборок, содержащих ее.Они автоматически включают заблокированное время, такое как ввод-вывод, которое вам необходимо знать, поскольку оно влияет на общее время.Если взять 100 или 1000 сэмплов, вы можете получить высокую точность измерений, но некоторые очень простые статистические данные доказывают, что для всех проблем, кроме самых маленьких, достаточно небольшого количества сэмплов для точного определения проблемы.Наконец, контекст, который сообщает, правильно ли используется строка, находится в примерах.Многие профилировщики собирают образцы вместе, чтобы получить числа, но не позволяют пользователю видеть репрезентативные образцы.В результате они склонны считать, что «горячая» строка кода необходима, когда фактически контекст может сказать им, что это не так.
Вот более обширный список проблем .