Проблемы производительности WPF DataGrid

Я тестирую WPF DataGrid в надежде на замену некоторых средств управления winforms и до сих пор был очень доволен процессом разработки. Производительность, кажется, мое самое большое беспокойство прямо сейчас. Моя рабочая станция разработки имеет примерно лучший CPU на Windows запуска рынка 7 с 6 концертами памяти DDR3. Управление окнами, которое я заменяю, является значительно более быстро реагирующим, который является беспокоящим.

Мой тест является базовым внедрением DataGrid, связанного с ObservableCollection, который обновляется однажды в секунду. Это также включает область Details, которая расширяема для раскрытия большего количества информации о каждой строке. Областью деталей является просто stackpanel с обертыванием ItemsControl TextBlock (который повторяется 6 раз),

Моя жалоба - то, что, если я пытаюсь прокрутить этот набор, это часто - вяленое мясо с задержкой, и если я пытаюсь развернуть каждую строку, поскольку они входят, приблизительно 15% щелчков не инициировали событие щелчка кнопок (DataGridTmplateColumn> CellTemplate> DataTemplate> Кнопка), Также прокрутка является более нервной, если некоторая деталь строк расширена (с полосой прокрутки, которая изменяет размер его сам, поскольку это идет/вниз),

что некоторые вещи состоят в том, чтобы искать / оптимизируют / избегают?

обновление

вот некоторые точки, которые я нашел полезным до сих пор:

  • положитесь как можно меньше на динамическое расположение. поскольку каждый компонент содержит много субкомпонентов и в динамическом мире расположения, все они должны назвать Меру и Методы макета, которые могут быть интенсивным CPU. таким образом вместо Автоматической ширины столбца (или никакая указанная ширина), используйте зафиксированные ширины

  • установите Комплект Производительности WPF и выйдите на связь с тем, как Ваше приложение представляется. действительно потрясающее приложение

  • поскольку Andrew указал, что ListView является большой альтернативой, поскольку, когда Вам не нужны усовершенствованные функции DataGrid, такие как обновление данных назад или возможно Представления Деталей (который я все еще надеюсь воспроизвести),

  • также SuspendableObservableCollection идеален для того, когда Вы добавляете несколько объектов в очень короткий промежуток времени (т.е. 100 объектов через 0,01 секунды и т.д.)

  • после большого тестирования я нашел, что BindingList намного быстрее, чем ObservableCollection. Я отправил снимки профилировщика производительности здесь той же загрузки, обработанной BindingList по сравнению с Заметным набором, и первый берет меньше чем половину процессорного времени. (имейте в виду, что это не просто производительность набора, но и при соединении с ListView)

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

13
задан Community 23 May 2017 в 10:29
поделиться

1 ответ

Вы имеете в виду DataGrid из WPF Toolkit? Если да, то, на мой взгляд, это довольно медленно, поэтому я решил использовать ListView с GridView.

1
ответ дан 2 December 2019 в 02:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: