Всем днем,
В настоящее время я профилирую довольно большое приложение CF WPF, пытаясь устранить некоторые проблемы с производительностью.Один включает 5-8 секундную остановку, которая происходит при переключении на определенный (довольно большой) UserControl.Я сузил это до RadGridView, содержащегося в этом UserControl, который долго загружался и обновлялся, останавливая поток пользовательского интерфейса и делая все приложение не отвечающим.Очевидно, что мы хотели бы устранить эту остановку, если это возможно.
Я пытался убрать любые пользовательские стили и DataTriggers в сетке, но в то время как это действовало, чтобы уменьшить нагрузку на поток пользовательского интерфейса в целом, остановка все ещеостался, казалось бы, не уменьшился.Через ANTS Profiler кажется, что в основном виноваты измерения и расположение сетки, а также некоторая загрузка шаблонов XAML.При отсутствии строк сетки, UserControls загружается значительно быстрее, и кажется, что добавления небольшого количества строк достаточно для того, чтобы вызвать остановку.В сетке включена виртуализация для строк и столбцов, но это, похоже, не помогает.График вызовов чрезвычайно глубок при рассмотрении, и кажется, что это вызовы, которые поднимают уведомления об обновлениях, макет обновления, загружают XAML и, прежде всего, измеряют дочерние FrameworkElements, которые виноваты.
Для пары потенциальных решенийЯ думаю о сохранении UserControl в памяти, но скрытом, чтобы уменьшить затраты на его переключение или заполнение сетки, возможно, постепенно, после загрузки UserControl.С первым может быть много работы, так как элемент управления подписывается на несколько вещей, которые необходимо подключить, отключить и повторно подключить в зависимости от ситуации.Последнее может также потребовать немалой работы, но может быть лучшим решением, потому что тогда, по крайней мере, мы могли бы попытаться самим уменьшить задержку или, по крайней мере, предупредить пользователя, когда это произошло.
Еслипроблема сохраняется, мы, вероятно, попросим Telerik взглянуть на нее, но я решил сначала спросить здесь, если кто-то сталкивался с такой проблемой раньше (не обязательно даже с RadGridView) и нашел решение некоторого описания.
Приветствия.