| 

.NET C# Java Javascript Exception

2
ich versuche gerade eine Griddarstellung mit WPF wirklich performant umzusetzen und stoße dabei auf folgende stubtile Eigenschaft der Rendering-Geschwindigkeit:

- Ich weise einem ItemsControl eine ItemsSource zu -> Rendering Time ca. 200ms
- Ich wiese dem ItemsControl wieder eine andere ItemsSource zu (gleiche Objekte, nur anders sortiert) -> Rendering Time ca. 600-700ms

Ich kann mir nicht erklären, warum das Rendering beim 2. mal länger dauern sollte als beim ersten mal.

Ideen?
News:
15.04.2013
kleffel 654 1 9
2 Antworten
1
Hast Du mal die die WPF Performance Suite drüberlaufen lassen?
In wie weit Du Controls optimieren kannst, findest Du hier oder hier. In der Regel geht es darum, die Virualisierung nicht zu zerstören.
Vielleicht liegt auch das Problem darin, dass Du dem Control eine andere ItemsSource zuweist und nicht die Collection selbst anpasst.
Performancemäßig wäre es vielleicht sinnvoller zwei Controls zu nutzen und stets nur eine visible zu setzen, während die andere im Hintergrund geladen wird.
Du solltest auch stets versuchen, den sogenannten logischen bzw. visuellen Baum, in dem alle Controls angezeigt werden klein zu halten. Dies kann man mit Snoop recht gut überblicken.
17.04.2013
judgy 3,0k 1 1 8
WPF Perf Suite gibt es leider nicht für Windows 8. Ich hatte denke ich tatsächlich die row virtualization zerstört. Woran es genau lag, kann ich nicht mehr genau reproduzieren. Nach einem kompletten refactoring der XAML Struktur ging es aber perfekt. Was mich nur immer noch wunder, warum das 1. rendering schnell war
kleffel 18.04.2013
Hm, wenn es die WPF Perf Suite nicht für Windows 8 gibt, ist dies kein gutes Zeichen für WPF und/oder Windows 8.
judgy 19.04.2013
1
Wenn du eine deine ItemSource sortiert hast funktioniert meines Wissens nach die Virtualisierung nicht mehr.
Hab ein ähnliches Problem mit Gruppierung.
15.04.2013
mrmee 745 1 8
Ändert sich dann auch das attached property VirtualizingStackPanel.IsVirtualizingProperty. Dies bleibt bei mir true. Ich sortiere ja die ItemsSource gar nicht, denn ich weise ja eine neue hinzu
kleffel 15.04.2013
Da bin ich dann auch überfragt. Für mich sieht es allerdings so aus als ob die Virtualisierung nicht mehr richtig arbeitet. Tritt das Problem auch auf wenn du deine erste ItemsSource erneut zuweist?
mrmee 16.04.2013
VirtualizingStackPanel.IsVirtualizingProperty kann true sein und Virtualisierung kann evtl. trotzdem nicht korrekt arbeiten. Somit muss man raten, ob die Virtualisierung klappt. Ich habe das dadurch gelöst, dass ich mir testweise 10.000 items oder mehr in mein ItemsControl reinlade, dann sieht man an der Ladezeit eindeutig, ob die Virtualisierung greift
kleffel 18.04.2013

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH