как профилировать приложение Silverlight MVVM с большим количеством пользовательских элементов управления - PullRequest
4 голосов
/ 23 мая 2010

Существует довольно большое приложение LOB silverlight, и мы написали множество пользовательских элементов управления, которые довольно тяжелы при рисовании.

Все данные загружаются службой RIA, обрабатываются и привязываются (используя интерфейс INofityPropertyChanged) к представлению.

Проблема в том, что первый рисунок занимает много времени. Следующие звонки на сервис (сервер) и перерисовка происходит довольно быстро.

Я использовал профилировщик Equatec для отслеживания проблемы. Я видел, что обработка занимает всего пару миллисекунд, поэтому моя идея состоит в том, что отрисовка с помощью SL-механизма идет медленно.

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

Ответы [ 2 ]

7 голосов
/ 23 мая 2010

Короткий ответ: - Нет, нет супер простого способа выяснить, почему ваше приложение работает медленно.

Длинный ответ:
Я никогда не использовал профилировщик Equatec для Silverlight, но он похож на dotTrace. В любом случае, они оба показывают ту же информацию, что и xPerf .
В основном информация, которую вы должны иметь перед собой, говорит о том, какие методы и классы заняли больше всего времени для выполнения.

Если эта информация указывает на графический движок платформы Silverlight (agcore.dll и npctrl.dll), вам придется начать медленный процесс, чтобы выяснить, что вы сделали неправильно.
На этом этапе я настоятельно рекомендую вам посмотреть каждый выступающий Сима Рамчандани о выступлении Silverlight. В частности PDC08 , Mix09 и Mix10 .

Шаг № 1 оптимизации оптимизации : Измерение. Мера. Измерить.
Четко определите, что вы пытаетесь улучшить, и установите числовое ожидание, когда производительность будет достаточно высокой.
Таким образом, вы можете убедиться, что ваши изменения положительно влияют на производительность.

Шаг № 2 для оптимизации перфоманса : начать удалять вещи.
В вашем случае я бы начал комментировать элементы управления вне формы. Когда производительность значительно улучшается, вы нашли своего виновника.

Шаг № 3 оптимизации оптимизации : Попробуйте исправить слабое звено.

Вот как бы я решил эту проблему.

С уважением,
- Джастин Анхель

2 голосов
/ 25 мая 2010

Попробуйте выполнить профилирование с помощью профилировщика Visual Studio, чтобы получить точную оценку вашего управляемого кода и собственного кода, выполняемого в Silverlight. Профилировщик поможет вам указать, на что вы тратите большую часть своего времени (каков горячий путь), а также на то, тратите ли вы это на каркас (SL) или на собственный код.

Основы профилирования:

  1. Откройте командную строку Visual Studio (как администратор), cd в каталог, где находятся ваши файлы DLL и PDB (обычно это папка «Debug»)
  2. VSPerfClrEnv / sampleon
  3. VSPerfCmd -start: образец -output: somefile.vsp VSPerfCmd -globalon VSPerfCmd -launch: "c: \ Program Files (x86) \ Internet Explorer \ iexplore.exe" -args: "" *
  4. VSPerfCmd -shutdown
  5. VSPerfClrEnv / off

Подробные инструкции по использованию профилировщика можно найти в моем блоге: http://www.nachmore.com/2010/profiling-silverlight-4-with-visual-studio-2010/

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

Надеюсь, это поможет,

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