WPF Animation FPS против использования процессора - ожидаю ли я слишком многого? - PullRequest
0 голосов
/ 08 июня 2010

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

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

~ 60FPS Средний процессор 35% на Core 2 Duo T7500 @ 2,2 ГГц, 3 ГБ оперативной памяти, NVIDIA Quadro NVS 140 М (128 МБ), Vista [Мой ноутбук для разработчиков]

~ 40FPS Средний процессор 50% на Pentium D @ 3,4 ГГц, 1,5 ГБ ОЗУ, стандартный графический адаптер VGA (неизвестно), сервер 2003 года [Дрянной рабочий стол]

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

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

WPF Performance Suite:

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

Невозможно подключиться к процессу: CCHearts.exe Хотитеkill it?

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

Performance Explorer:

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

Окно вывода из Performance:

Профилирование запущено.ID процесса профилирования 5360 (CCHearts).Идентификатор процесса 5360 завершен.Данные записываются в C: \ Projects2 \ CC.Hearts \ CCHearts100608.vsp.Профилирование закончено.PRF0025: Данные не были собраны.Профилирование завершено.

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


Краткое содержание:

Пока много прогресса ...

Performance Explorer

Проблема: Не работает, смутное сообщение об ошибке.

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

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ SysPlant]

"Start" = dword: 00000004

Производительность WPFSuite

Проблема: Не работает, сообщений об ошибках нет.

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

WPF Animation

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

Решение: Много хороших настроек здесь и там.Но улучшение ОГРОМНОЕ было Кэшированная композиция , как указал Иеремия Моррилл.Проверьте changesets .

Ответы [ 3 ]

4 голосов
/ 09 июня 2010

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

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

Path CacheMode = "BitmapCache" ...

0 голосов
/ 08 июня 2010

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

0 голосов
/ 08 июня 2010

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

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

Вот лучшее место для начала

Максимизация производительности WPF 3D

...