Poprawa wydajności WPF DataGrid

W moim .NET 3.5 WPF aplikacji, mam WPF DataGrid który będzie wypełniony 500 kolumnami i 50 wierszami. Wydajność aplikacji jest bardzo słaba w przewijaniu, lub gdy robię DataGrid.Items.Refresh() lub wybierając wiersze.

Faktycznie aplikacja zajmie około 20 sekund, aby zaktualizować układ. Layout_Updated() zdarzenie zostanie wywołane po 20 sek.

Jeśli zmniejszę kolumny do 50 lub mniej, aplikacja będzie bardzo responsywna. Zgodnie z moimi ustaleniami wydajność jest bezpośrednio związana z liczbą kolumn.

Jak poprawić Wydajność?

Author: Kishor, 2012-12-07

4 answers

Istnieje kilka opcji, które możesz włączyć, aby pomóc ci w swoim DataGrid obiekcie

EnableColumnVirtualization = true
EnableRowVirtualization = true
Myślę, że ci dwaj są najważniejsi. Następnie spróbuj wykonać Wiązanie asynchroniczne
ItemsSource="{Binding MyStuff, IsAsync=True}"

I na koniec słyszałem, że ustawienie maksymalnej wysokości i szerokości może pomóc, nawet jeśli jest powyżej maksymalnego rozmiaru ekranu, ale sam nie zauważyłem różnicy (twierdzenie miało związek z automatycznym pomiarem rozmiaru)

MaxWidth="2560"
MaxHeight="1600"

Również nigdy nie umieszczaj DataGrid w ScrollViewer, ponieważ zasadniczo przegrasz wirtualizacja. Daj znać, jeśli to pomoże!

 60
Author: Alan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-25 21:19:25

Sprawdź czy masz Właściwość ScrollViewer.CanContentScroll ustawioną False. Ustawienie tej właściwości na false wyłącza wirtualizację w sposób pogorszy wydajność siatki danych. Aby uzyskać więcej wyjaśnień, zapoznaj się z tym CanContentScroll

 3
Author: Rajat Ghalni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-01 07:08:44

IsAsync = True} " jest szybszy po użyciu tego polecenia, aplikacja pobiera wiele rekordów w krótkim czasie, to działało dla mnie...

 1
Author: Vinayaga Raj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-01 20:13:06

Może spróbuj tego zamiast ładować wszystkie 50 wierszy na raz

Http://www.codeproject.com/Articles/34405/WPF-Data-Virtualization

 0
Author: Constanta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-07 14:06:06