WPF DataGrid очень медленный, как я могу улучшить время начальной загрузки? - PullRequest
1 голос
/ 01 октября 2010

У меня есть окно с сеткой данных, показывающее сгруппированные данные.

Я загружаю около 4 x 300 элементов в сетку данных WPF, которые сгруппированы в 4 группы.

Группировка отключает виртуализацию.

Я установил IsAsync = "True", поэтому мое окно открывается быстро, но DataGrid просто заполняется ПОСЛЕ 11 СЕКУНД ??? ???

Что я могу сделать, чтобы ускорить загрузку / отображение моих данных?

Ответы [ 3 ]

2 голосов
/ 01 октября 2010

Вы сами заявили - группировка отключает виртуализацию; Сейчас я думаю, что показ каждой группы отдельно (в ее собственной таблице данных) - это путь, если это вообще возможно ... или какой-то другой подобный трюк, чтобы просто не показывать все элементы с помощью группировки.

Намного позже отредактируйте: На самом деле на http://jerryclin.wordpress.com/2008/02/22/listbox-grouping-and-virtualization/ написана довольно интересная статья о том, как действовать, если вам ДЕЙСТВИТЕЛЬНО нужна группировка ListBox с виртуализацией. Не уверен, что это стоит боли, но это возможно.

0 голосов
/ 14 июля 2016

В .NET 4.5.2 виртуализация сгруппированных элементов наконец возможна:

<DataGrid VirtualizingPanel.IsVirtualizingWhenGrouping="True" />

https://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingpanel.isvirtualizingwhengrouping%28v=vs.110%29.aspx

0 голосов
/ 14 сентября 2011

Не уверен, что это связано, но у меня была похожая проблема с DataGrid, в которой потребовалось буквально несколько секунд для обновления после изменения размера окна, сортировки столбца и т. Д., И он заблокировал пользовательский интерфейс окна (1000 строк)., 5 столбцов).

Это привело к проблеме (ошибка?) С расчетами размеров WPF.У меня было это в сетке с RowDefinition Height = "Auto", которая заставляла систему рендеринга пытаться пересчитать размер DataGrid во время выполнения, измеряя размер каждого столбца и строки, предположительно, заполняя всю сетку (как я понимаю).Предполагается, что это нужно как-то разумно обрабатывать, но в этом случае это не так.

Быстрая проверка, чтобы выяснить, не является ли это связанной проблемой, состоит в том, чтобы установить для свойств высоты и ширины DataGrid фиксированный размер дляПродолжительность теста и попробуйте запустить снова.Если ваша производительность восстановлена, постоянное исправление может быть одним из следующих вариантов:

  • Изменить размеры содержащихся элементов на относительные (*) или фиксированные значения
  • Установить MaxHeight и MaxWidthDataGrid с фиксированным значением, превышающим обычное значение
  • Попробуйте использовать другой тип контейнера с другой стратегией изменения размера (Grid, DockPanel и т. д.)
...