Улучшение производительности WPF DataGrid
В моем приложении .NET 3.5
WPF
у меня есть WPF
DataGrid
, который будет заполнен 500 столбцами и 50 строками.
Производительность приложения очень низок в прокрутке, или когда я делаю DataGrid.Items.Refresh()
или при выборе строк.
Фактически для обновления макета потребуется около 20 секунд. Layout_Updated()
событие будет срабатывать через 20 секунд.
Если я уменьшу столбцы до 50 или меньше, приложение будет очень отзывчивым. По моим результатам производительность напрямую связана с количеством столбцов.
Как улучшить производительность DataGrid
?
Ответы
Ответ 1
Есть несколько вариантов, которые вы можете включить, чтобы помочь вам в объекте DataGrid
EnableColumnVirtualization = true
EnableRowVirtualization = true
Эти два являются основными, которые, я думаю, могут помочь. Затем попробуйте сделать привязку async
ItemsSource="{Binding MyStuff, IsAsync=True}"
И, наконец, я слышал, что установка максимальной высоты и ширины может помочь даже в том случае, если она превышает максимальный размер экрана, но я не заметил разницы (требование было связано с автоматическим измерением размера)
MaxWidth="2560"
MaxHeight="1600"
Также никогда не ставьте DataGrid
в ScrollViewer
, потому что вы по существу потеряете виртуализацию. Дайте мне знать, если это поможет!
Ответ 2
Проверьте, есть ли у вас свойство ScrollViewer.CanContentScroll 'False'.
Установка этого свойства в false отключает виртуализацию таким образом, что ухудшит производительность вашей Data-grid. Для получения дополнительной информации обратитесь к CanContainScroll
Ответ 3
Возможно, попробуйте это вместо загрузки всех 50 строк сразу
http://www.codeproject.com/Articles/34405/WPF-Data-Virtualization
Ответ 4
IsAsync = True} "быстрее после использования этого оператора, приложение получает много записей за короткое время, оно сработало для меня...