Я тестирую 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)
мой поиск все еще продолжается, поскольку что-то, кажется, пропускает память в моем приложении и замедляет его к останову после часов пары.
Вы имеете в виду DataGrid из WPF Toolkit? Если да, то, на мой взгляд, это довольно медленно, поэтому я решил использовать ListView с GridView.