Задать вопрос
@pixik

Как найти узкие моменты в MFC проекте, где может сильно проседать производительность?

Доброго времени!
Проблема следующая, есть проект на MFC, при запуске просто отрисовка окна занимает 25-30 % процессорного времени. найти именно тот маленький бесконечный цикл, где это может происходить пока не могу. При попытки запустить профилировщик, после записи файла с данными профилировки студия крашится. В итоге, не могу посмотреть какая функция проседает...
Сделал TRACE(..) в методе OnPaint(), подключился дебагом и увидел тонну сообщений от OnPaint. Видимо его вызовы все время и кушают. Но как понять что вызывает... ведь это в основном callback`и.
Кто как боролся с перфомансом, поделитесь пожалуйста:) может есть какие то первичные признаки типа множество вызовов invalidate() в коде, while(a == true) или ещё чего.

UPD #1
При попытке профилировать из Visual studio 2013 получаем следующее:
2218d8fd6e7448289d0e26f0a4a8da42.JPG9ffd8774f17144b9a2c90e3b1d392518.JPG1db60585480b4e98af17eb3fe6501175.JPG

UPD #2
Программа SPY++ показала, что действительно шлётся тонна сообщений WM_KICKIDLE, правда не понятно откуда они берутся.
Странно, в коде ничего не менял, даже после всех испытаний откатил коммит, но проблема с производительностью пропала. Немного напрягает такое количество сообщений WM_KICKIDLE.
8ebfbe3b2620497b9567ec453890fc17.JPG

Спасибо всем!
  • Вопрос задан
  • 301 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
AxisPod
@AxisPod
Ну ищите по проекту Invalidate и смотрите откуда вызываются. Опять же не факт, что именно Invalidate к этому приводит, посмотрите какие события где летают. Spy++ вам в помощь.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Я бы попытался исправить студию, потому как изобретать костыль, в то время, как существует стандартное средство - профилировщик -это как-то странно.

Ну или расковыривать проект и исходники MFC, искать, чего же там делается такое, в OnPaint.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы