Итак, я создаю приложение 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?