Отладка проблемы производительности на ListBoxDragDropTarget (Silverlight Toolkit)? - PullRequest
1 голос
/ 09 июня 2010

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

«EnableRedrawRegions» показывает, что экран перерисовывается на каждом кадре. У меня такой вопрос: как я могу отследить причину этой постоянной перерисовки?

1 Ответ

2 голосов
/ 10 июня 2010

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

Я начал с замечательного учебника Seema по использованию 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 .После этого я смог понять, что у меня был тупой контент в эффекте падающей тени, который менялся много раз в секунду и вызывал постоянный пересчет / перерисовку всего эффекта падающей тени.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...