2009-09-07 10 views
32

Chciałbym prosty opis jak zaimplementować virtualizingstackpanel dla ItemsControl która jest z danymi do ObservableCollection w moim MVVM.WPF VirtualizingStackPanel dla zwiększenia wydajności

Mam instancję ItemsControl dla każdej karty w kontrolce zakładki, a przełączanie kart staje się BARDZO wolne, gdy ItemsControl powiększa się.

Co mogę zrobić, aby przyspieszyć aplikację?

Otworzyłem profiler WPF i zobaczyłem, że każdy element (który jest niestandardową formantem użytkownika) wyświetlany w moich ItemsControl na każdej karcie miał swój własny ContentPresenter. Zasadniczo miałem 100 prezenterów treści, które działają na 100 pozycji w moim ObservableCollection w MVVM. Czy to się poprawiło? Jak mogę zoptymalizować?

Odpowiedz

48

Istnieją dwie techniki, które mogą być bardzo pomocne. Obie są bardzo dobrze opisane przez Bea Stolnitz na jej blog.

Pierwszym jest UI Virtualization a drugi Data Virtualization

W UI wirtualizacji użyć rzeczy jak VirtualizingStackPanel aby UI rysować mniej rzeczy.

danych wirtualizacji sprawi, że nie przynoszą milion obiektów do pamięci, gdy są tylko zamiar pokazać 100.

Więc UI wirtualizacji minimalizuje ilość rzeczy wyciągnąć i wirtualizacji danych minimalizuje liczbę rzeczy, które mogłyby być wyciągniętym.

nadzieję, że pomoże

9

miałem dokładny ten sam problem ind WPF przy użyciu TabControl i DataGrid. Zwiększając rozmiar elementu DataGrid, przełączanie kart staje się BARDZO wolne! Później znalazłem ten post czytając blog od Bea Stolnitz, jak przypuszcza poprzednia odpowiedź. Że dał mi wskazówkę do Google "WPF TabControl VirtualizingStackPanel" co daje mi link do DrWPF: http://groups.google.com/group/wpf-disciples/browse_thread/thread/6f3531a1720252dd

opisuje on dokładnie problem i daje rozwiązanie :-))

.... przeboju perf jest podczas budowania drzewa. Niestety, jeśli korzystasz z typowej metody MVVM z wiązaniem właściwości ItemsSource
TabControl, całe drzewo musi zostać przebudowane za każdym razem, gdy wybrany jest element karty. Jest to zwykle bardzo kosztowna operacja. ....