Equatec - хороший профилировщик, но по моему опыту, вот что происходит в приложении .net большого размера.
Вы можете найти рутину, которая активна в хорошем проценте случаев, например, 20%, и вы можете даже найти определенную «горячую» линию внутри нее, но вы можете посмотреть на нее и не знать, что с этим делать. потому что, насколько вы можете судить, это необходимо.
В то же время в коде может быть что-то большее, чем та, которая не очень хорошо проявляется в профилировщике, потому что она не ограничена одной подпрограммой.
Если я могу привести только один пример, я видел приложение, которое тратит примерно 50% своего времени запуска на глубину 20-30 уровней в стеке вызовов, получая строки из ресурсов только для того, чтобы оно могло отображать их пользователю, чтобы позволить они знают, что так долго. Если бы он нашел другой способ сделать это, он запустился бы в два раза быстрее! Профилировщик ANTS (еще один хороший) не дал понятия о том, что происходило.
Как я нашел это? Старый метод, аналогично , здесь он делается , и здесь объяснено .
На следующем графике показано, что если вы вручную производите выборку из стека N раз, приостанавливая работу программы, и на двух из этих выборок вы видите, что он выполняет что-то, что можно заменить чем-то намного более быстрым, количество время, которое вы можете сэкономить, и соответствующий коэффициент ускорения.
Например, красная кривая (2/5) означает, что если вы берете пять стековых сэмплов и видите, что вы можете улучшить на двух из них, вы не знаете точно, сколько вы сэкономите. Однако наиболее вероятное значение составляет 2/5 (40%, ускорение 67%), среднее значение составляет 3/7 (43%, ускорение 75%), и оно будет где-то в диапазоне примерно между 10% (ускорение 11% ) и 70% (ускорение 3,33х). Это на тот случай, если вы думаете, что не можете доверять небольшому количеству образцов.
Неплохая игра
Если вы хотите больше уверенности, возьмите больше образцов.
(Участок Бета-распределение X ~ Be( number of hits + 1, number of misses + 1 )
и Speedup = 1 / (1-X).)