WPF: улучшение производительности для работы более старых ПК

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

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

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

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

Я загрузил инструмент производительности WPF с MS и переделывал его (на моей dev машине). В документах говорится это о метрике "Частоты кадров" в инструменте Perforator:

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

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

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

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

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

  • Что некоторые общие вещи состоят в том, чтобы искать (или избежать) в коде для улучшения производительности?
  • Какие шаги я могу взять использование инструмента производительности WPF для сужения проблемы?
  • Спецификация ПК упоминается выше (Intel Celeron 1.80GHz с 2 ГБ RAM) слишком медленный для выполнения даже ванильных приложений WPF?
9
задан Phil Sandler 23 April 2010 в 13:33
поделиться

1 ответ

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

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

3
ответ дан 5 December 2019 в 01:42
поделиться
Другие вопросы по тегам:

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