Приложения Windows обычно содержат петлю верхнего уровня, где они ждут внешних событий, таких как движения/клики мыши и хиты клавиатуры, или события, созданные внутри. Когда происходит событие, он вызывает соответствующий обработчик, который может сделать немного или много. Обычно он проходит довольно обширное и глубокое дерево вызовов, но если он быстро заканчивается, он просто возвращается к ожиданию.
Приложение, которое, как представляется, хорошо работает, проводит большую часть времени настенных часов, ожидая следующего внешнего события.
Приложение, которое, как представляется, плохо работает, тратит большую часть времени на посещение деревьев вызовов в ответ на события.
Способ повышения его производительности - выявить узкие места и удалить их. Узкие места почти всегда состоят из вызовов функций в дереве вызовов, в вашем коде, которые вы не знали, были дорогими. Части дерева вызовов, которые не входят в ваш код, - это то, о чем вы ничего не можете сделать, но если вы можете избежать их вызова, у вас есть возможность получить ускорение.
Как если бы вы были менеджером, пытающимся выяснить, тратят ли ваши сотрудники время, вы можете просто отказаться от участия в обсуждении и посмотреть, что они делают. В программном обеспечении, this is how you can do that.
Будьте осторожны с профайлерами, которые путают вас такими вещами, как: 1) рассказывая вам о «времени на себя» подпрограмм, 2) сообщая вам, сколько раз функция вызывается, 3) дает вам массивный, но в основном нерелевантный график или таблицу, или 4) много интересных, но не всегда релевантных подсказок, таких как промахи кеша и переключатели потоков.
Нахождение узких мест очень просто, потому что, если они маленькие, они не являются узкими местами, и если они большие, то в то время, когда они тратят впустую, они находятся в стеке, просто ожидая, что вы заметите. Here's more on that subject.
Что делает ваша программа в целом? Является ли пользовательский интерфейс чем-то странным, вы заметили замедленность при его использовании? – BrandonAGr