WPF: повышение производительности для работы на старых компьютерах - PullRequest
9 голосов
/ 23 апреля 2010

Итак, я создаю приложение WPF, сегодня провел тестовое развертывание и обнаружил, что оно работает довольно плохо.Я был удивлен, поскольку мы действительно мало что делаем с визуальными эффектами или анимацией.

Я развернул на двух машинах: самой быстрой и самой медленной, которая потребуется для запуска приложения (самый медленный ПК имеетIntel Celeron 1,80 ГГц с 2 ГБ оперативной памяти).Приложение работало довольно быстро на более быстрой машине, но было медленным на медленной машине.И когда я говорю «прерывистый», я имею в виду, что курсор перепрыгивал, даже просто пропуская его над любым открытым окном приложения, которое имело фокус.

Я открыл окно «Производительность диспетчера задач» и увидел, что загрузка ЦП подскочилавсякий раз, когда приложение фокусировалось и курсор двигался над ним.Если бы я сфокусировался на другом (например, Excel), загрузка процессора снизилась через секунду.Это произошло на обеих машинах, но прерывистость была заметна только на более медленной машине.У меня было очень ограниченное время, чтобы повозиться с машинами развертывания, поэтому я не проводил много подробных тестов.

Приложение отлично работает на моей машине для разработки, но я также вижу, что процессор там подскочил до 10%, просто наведя курсор на окно.

Я скачал инструмент производительности WPF из MS и возился с ним (на моем компьютере разработчика).Документы говорят это о метрике «Частота кадров» в инструменте «Перфоратор»:

Для приложений без анимации это значение должно быть около 0.

Приложение неделать любую тяжелую анимацию, но частота кадров остается около 50, когда курсор находится над любым окном.На экранах, которые я тестировал, заголовки столбцов в сетке имеют «подсветку» и кнопки, которые изменяют цвет и внешний вид при прокрутке.Даже перемещение мыши по пустым областям окон вызывает одинаковую частоту кадров и загрузку ЦП (похоже, это не связано с этими незначительными анимациями).

(Кроме того, я не могу понять, как получитькроме инструментов по умолчанию - Perforator и Visual Profiler - установленных в инструменте производительности WPF. Это, вероятно, отдельный вопрос.

У меня также есть инструмент профилирования Redgate, но я не уверен, что это такможет пролить свет на производительность рендеринга.

Итак, я понимаю, что это не легко устранить неисправности без специфики или примера кода (который я не могу опубликовать).Мои вопросы:

  • Какие общие вещи нужно искать (или избегать) в коде для повышения производительности?
  • Какие шаги я могу предпринять, используя инструмент производительности WPF для суженияпроблема?
  • Перечисленные выше спецификации ПК (Intel Celeron 1.80 ГГц с 2 ГБ ОЗУ) слишком медленные, чтобы запускать даже приложения Vanilla WPF?

Ответы [ 2 ]

3 голосов
/ 23 апреля 2010

Применяете ли вы какие-либо BitmapEffect -ы к своим элементам пользовательского интерфейса? Они не обрабатываются графическим процессором, поэтому CPU заботится об их отображении. При неправильном использовании (например, применение эффекта OuterGlowBitmapEffect к большому сложному элементу) они могут оказать ужасное влияние на производительность.

Кроме того, вы все равно можете попробовать профилировать свое приложение с помощью профилировщика производительности. Просто чтобы посмотреть, не является ли это вашим кодом.

0 голосов
/ 25 ноября 2010

Это не нормально для WPF - я подозреваю, что один из ваших разработчиков написал код, который запускает таймер в фоновом режиме (или, более вероятно, с учетом вашего описания, обработчик перемещения мыши), который каким-то образом влияет на пользовательский интерфейс.

Если у вас есть профилировщик производительности ANTS (это действительно хорошо), я запустил бы это для вашего приложения и воспроизвел бы проблему.

Как только вы это сделаете, ANTS должна довольно быстро сказать вам, чтопроблема в.Если ANTS ничего не раскрывает и показывает, что на самом деле ни один из ваших кодов не работает в течение этого времени, то я подозреваю, что драйверы графической карты содержат ошибки.

Вы можете проверить это, отключив аппаратное обеспечение.ускорение путем установки следующего раздела реестра и повторной попытки:

HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics\DisableHWAcceleration to 1

Примечание: значение DisableHWAcceleration должно быть DWORD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...