Приложения Windows, как правило, содержат цикл верхнего уровня, в котором они ожидают внешних событий, таких как движения / щелчки мыши и нажатия клавиш клавиатуры, или события, созданные внутри.Когда происходит событие, оно вызывает соответствующий обработчик, который может делать немного или много.Как правило, он проходит по довольно обширному и глубокому дереву вызовов, но если он быстро завершается, он просто возвращается к ожиданию.
Приложение, которое, кажется, работает хорошо, тратит большую часть времени настенных часов в ожидании следующего внешнегоevent.
Приложение, которое, по-видимому, работает плохо, тратит большую часть своего времени на обход деревьев вызовов в ответ на события.
Способ повысить производительность - найти узкие места и устранить их.Узкие места почти всегда состоят из вызовов функций в дереве вызовов, в вашем коде, которые вы не знали, были дорогими.Части дерева вызовов, которых нет в вашем коде, - это вещи, с которыми вы ничего не можете поделать, но если вы можете избежать их вызова, у вас есть возможность получить ускорение.
Так же, как если бы вы былиМенеджер, пытающийся увидеть, тратят ли ваши сотрудники время, вы можете просто зайти без предупреждения и посмотреть, что они делают.В программном обеспечении это то, как вы можете это сделать .
Будьте осторожны с профилировщиками, которые вводят вас в заблуждение такими вещами, как 1) рассказывают вам о «времени для себя» из процедур, 2) сообщают вам, сколькокогда вызывается функция, 3) дает вам массивный, но в основном не относящийся к делу график или таблицу, или 4) множество интересных, но обычно не относящихся к делу подсказок, таких как ошибки в кеше и переключатели потоков.
Найти узкие места очень легко,потому что, если они маленькие, они на самом деле не являются узкими местами, и если они большие, то в течение времени, которое они тратят, они находятся в стеке, просто ожидая, что вы заметите. Подробнее об этом ...