Отладка производительности выходит на ListBoxDragDropTarget (Инструментарий Silverlight)?

У меня есть сложный проект с помощью Инструментария Silverlight ListBoxDragDropTarget для операций перетаскивать-отбрасывания, и это - maxing ЦП. Я пытался воспроизвести проблему в проекте небольшой выборки, но затем она хорошо работает. Проблема сохраняется, когда я удаляю наши пользовательские стили и все другие средства управления от страницы, но страница размещается в ScrollView другой страницы.

"EnableRedrawRegions" показывает, что экран перерисовывается на каждом кадре. Мой вопрос - это: Как я могу разыскать причину этой постоянной перерисовки?

1
задан carlmon 10 June 2010 в 06:16
поделиться

1 ответ

Я использовал XPerf , чтобы помочь отследить проблемы производительности, связанные с перерисовкой в ​​Silverlight. Это не совсем простой или легкий процесс, но он может помочь указать вам правильное направление, в котором находятся ваши проблемы.

Я начал с отличного руководства Симы об использовании инструмента командной строки XPerf для профилирования использования ЦП для приложения Silverlight. Вы можете загрузить свое приложение, начать выборку с помощью XPerf, выполнить операции с интенсивным использованием ЦП, а затем остановить выборку и проанализировать профиль, созданный XPerf. Когда вы смотрите на графики XPerf, вы можете выбрать фильтрацию по некоторому процессу (например, iexplorer или вашему браузеру), чтобы увидеть общий% CPU. Затем вы можете выбрать конкретный период времени в профиле и развернуть, чтобы увидеть, какие функции и какие библиотеки DLL используют больше всего циклов ЦП. Если вы укажете XPerf на сервер символов Microsoft, вы должны получить конкретные имена функций, в которых приложение проводит большую часть своего времени.

Для приложения Silverlight наиболее важно посмотреть, что происходит в agcore.dll , npctrl.dll и coreclr.dll . Если проблемы с производительностью связаны с перерисовкой, большая часть времени процессора, вероятно, тратится на agcore.dll , поскольку он выполняет большую часть работы, связанной с графикой для Silverlight. Затем вы можете углубиться в это и увидеть конкретные функции в agcore.dll , которые чаще всего вызываются во время выборки.

Я понимаю, что это довольно неприятный способ отладки, поскольку вы действительно можете видеть только то, что происходит в основных функциях Silverlight, но он может помочь вам понять, что происходит. В моем случае я смог увидеть, что большая часть времени была потрачена на вычисление падающих теней в agcore.dll . Затем я смог понять, что у меня был какой-то контент внутри эффекта тени, который менялся много раз в секунду и приводил к постоянному пересчету / перерисовке всего эффекта тени.

После выявления проблем с перерисовкой, возможно, вы захотите изучить Ускорение графического процессора с помощью BitmapCaching, если вы еще этого не сделали. Это поможет переложить часть перерисовки на графический процессор и сэкономит вам несколько циклов процессора.

2
ответ дан 2 September 2019 в 23:54
поделиться
Другие вопросы по тегам:

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