2010-06-08 2 views
0

Работа на экранной заставке для моей жены, http://cchearts.codeplex.com/, и, хотя мне удалось улучшить FPS на нижних конечных машинах, использование процессора по-прежнему кажется очень высоким.WPF Animation FPS против использования ЦП - Ожидаю ли я слишком много?

Вот некоторые цифры, я выбежала из нескольких 5 минутных периодов дискретизации:

~ 60FPS 35% среднего процессора на Core 2 Duo T7500 @ 2.2GHz, 3GB RAM, NVIDIA Quadro NVS 140M (128 Мб), Vista [My DEV ноутбук]

~ 40fps 50% средняя загрузка процессора Pentium D @ 3.4GHz, 1.5GB RAM, Стандартный VGA графический адаптер (неизвестен), 2003 Сервер [дерьмовый рабочий стол]

Я понимаю нижнюю частоту кадров и более высокий уровень использования ЦП на дерьмовом рабочем столе, но он все еще кажется довольно высоким, а 35% на моем ноутбуке для разработчиков также кажется высоким.

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

WPF Performance Suite:

Процесс запуска Ошибка

Невозможно подключиться к процессу: CCHearts.exe ли вы хотите, чтобы убить его?

Это сообщение об ошибке возникает, когда я нажимаю Отменить после попытки запуска. Если я не нажимаю «Отменить», он сидит там без дела, я думаю, ожидаю, чтобы прикрепить.

Performance Explorer:

Не удалось запустить C: \ Projects2 \ CC.Hearts \ CC.Hearts \ Bin \ Debug (USEVISUAL) \ CCHearts.exe. Предыдущая попытка профилировать приложение завершилась неудачно. Перезагрузите приложение.

Окно вывода из спектакля:

Профилирование начал. Процесс профилирования ID 5360 (CCHearts). Вышел процесс ID 5360. Данные, записанные на C: \ Projects2 \ CC.Hearts \ CCHearts100608.vsp. Профилирование завершено. PRF0025: Данные не были собраны. Профилирование завершено.

Таким образом, я застреваю, желая улучшить производительность, но не имея конкретного способа определить, где находится узкое место. Были относительно успешные метание дротиков в этот момент, но теперь я за что :)


Резюме:

Лота прогресса до сих пор ...

Performance Explorer,

Проблема: не работало, расплывчатое сообщение об ошибке.

Решение: Использовал command line version получить сообщение об ошибке, что реальная указал мне на этот thread указывая на то, что это был Symantec длл блокирует меня. Настройка следующий раздел реестра исправили проблему:

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ SysPlant]

"Start" = DWORD: 00000004

WPF Performance Suite

Problem : Не работает, нет сообщения об ошибке.

Решение: Используйте WPF Performance Suite предназначен для .NET 4 из Windows SDK 7.1 вместо предыдущей версии из Windows SDK 7 (я чувствую себя глупо :-P)

WPF анимация

Проблема: Высокое использование ЦП по сравнению с FPS/обработанной рабочей нагрузкой.

Решение: Локально тонкие настройки здесь и там. Но HUGE улучшение было Cached Composition как указано Джеремией Моррилл. Проверьте changesets.

+0

На двухъядерном процессоре Core 2 Duo E6600/GeForce 8800GT (с разрешением 1920x1200 пикселей) экранная заставка работает плавно при 60 FPS при среднем использовании процессора 10-15%. Я бы не стал сильно беспокоиться. Попробуйте установить «RenderOptions.CachingHint» в Cache в ваших сердцах, хотя с тех пор, как вы используете WPF 4. –

+0

Спасибо, что посмотрели, и хорошо знать, что он хорошо работает на другой машине. Основная причина, по которой я пытаюсь выжать из нее больше производительности, - это то, что он пинает вторичные охлаждающие вентиляторы на «дрянной настольной системе», упомянутой выше. Это похоже на чрезмерное использование энергии для приложения, предназначенного для запуска, когда ПК неактивен. В любом случае я очень заинтересован в том, чтобы выяснить, что мешает мне получить возможность профилировать. –

ответ

4

Я загрузил ваш код и увидел ~ 20-28% загрузки процессора на моем четырехъядерном процессоре 2.6ghz. Добавив кешированную композицию, я смог получить ее до ~ 6-8% процессора.

Я скомпилированы с использованием "DEBUG", а не "DEBUG (USEVISUAL)" и в Heart.xaml я добавил BitmapCache на Путь:

Путь CacheMode = "BitmapCache" ...

+0

Очень интересно. Я должен посмотреть на это. Я бросил Heart.xaml для DrawingVisual, потому что это был предположительно более легкий вес, но, похоже, он тратит много времени на рендеринг (~ 25%). Обязательно нужно проверить это. Большое спасибо за то, что нашли время, чтобы изучить это. –

+0

Нет проблем. Я не уверен, как заставить BitmapCache работать с вашим DrawingVisual, поскольку CacheMode = новый BitmapCache(), похоже, не имеет эффекта. Я бы посмотрел на функции кеширования WPF, так как они значительно увеличили производительность. –

+0

Я забыл упомянуть, что вы мужчина :-). Еще раз спасибо за то, что указал на Кэшированную композицию. http://cchearts.codeplex.com/SourceControl/changeset/changes/67452 –

0

Вы не хотите оптимизировать перекрытие. Первый вопрос, на который нужно ответить, - это то, что большинство настроек заставки?

Если все занимает 50% процессор, тогда я бы не стал беспокоиться (я сомневаюсь, что это так). Если вы хотите сохранить циклы лучше всего, прежде чем просто бросать дротики, убедитесь, что вы действительно понимаете 3D-аспекты WPF.

Вот лучшее место, чтобы начать

Maximize WPF 3D Performance

+0

Это хороший первый вопрос, и я не уверен, как определить количество. На упомянутой выше «дрянной настольной системе» вторичное охлаждение срабатывает, когда работает экранная заставка. Это не происходит ни с одной из запасных заставок Windows или с помощью (* MUCH * менее анимированных) WinForms заставки, которые я написал ранее. –

0

я заметил подобный устойчивый высокая загрузка ЦП (~ 95%) на Celeron 1,1 ГГц, но я не заметил какого-либо ухудшения производительности в результате включение анимации. Я никогда не оценивал FPS, хотя я подозреваю, что это было довольно низко. Мое впечатление, что WPF следует оппортунистической стратегии использования ресурсов, используя то, что может, чтобы получить лучшее качество, которое он может собрать, но не настолько, что это мешает другой обработке. Если вы загрузите CPU с другими задачами, я подозреваю, что использование процессора, связанное с графикой, будет уменьшаться соответствующим образом.

Смежные вопросы