Ich verwende ein StackPanel, um mehrere Steuerelemente vertikal anzuordnen (z. B. Titel, Unterüberschriften, Listbox, Trennzeichen, Listbox usw.).Verbessern Sie die Leistung für große ListBox in StackPanel?
Das StackPanel ist ein Kind eines ScrollViewer, um sicherzustellen, dass sein Inhalt immer scrollbar ist.
Eines der Steuerelemente im StackPanel ist eine ListBox.
Ihre ItemsSource ist eine an eine riesige Sammlung gebundene Datenmenge, und für jedes Objekt wird ein komplexes DataTemplate verwendet.
Leider bekomme ich wirklich schlechte Leistung (hohe CPU/Speicher) damit.
Ich versuchte
- die List-Box der Itemspanel auf einen VirtualizingStackPanel Einstellung und
- zwingende seine Control nur einen Itemspresenter (die Scroll der List-Box entfernen).
Aber es gab keinen Unterschied in den Leistungen. Ich nehme an, das StackPanel gibt seinen internen Kindern während der Messung unendliche Höhe?
Wenn ich den ScrollViewer und das StackPanel durch andere Panels/Layouts (z. B. Grid, DockPanel) ersetzt habe und die Leistung deutlich verbessert wurde, liegt die Lösung in der Virtualisierung.
Gibt es eine Möglichkeit für mich, die CPU/Speicherleistung dieser Ansicht zu verbessern?
[Update 1]
Original-Beispielprojekt: http://s000.tinyupload.com/index.php?file_id=29810707815310047536
[Update 2]
I Restyling/Templating TreeView/TreeViewItems versucht, mit kommen das folgende Beispiel. Es dauert immer noch eine lange Zeit zu starten/selbe, hohe Speicherauslastung. Aber sobald es geladen ist, fühlt sich das Scrollen viel reaktionsfähiger als das Original-Sample an.
Frage mich, ob es noch eine andere Möglichkeit gibt, die Startzeit/Speicherauslastung weiter zu verbessern?
Restyled TreeView Projekt: http://s000.tinyupload.com/index.php?file_id=00117351345725628185
[Update 2]
pushpraj Lösung funktioniert wie ein Charme
- Original:
- Startup: 35s,
- Speicher : 393 MB
- Scrolling: Langsam
- TreeView:
- Startup: 18s,
- Speicher 377MB,
- Scrolling: Fast
- pushpraj Lösung:
- Startup : < 1s,
- Speicher: 20MB,
- Scrolling: Fast
die maximale Höhe des listbox Fixing würde 2 Scrollbalken erscheinen lassen (siehe http://i.imgur.com/s1MJ6BO.png?1) – jayars
das ist wahr, aber zur gleichen Zeit kann Virtualisierung nur funktionieren, wenn die Höhe fest ist oder maximale Höhe definiert ist, kann es nicht für unbegrenzte Höhe arbeiten. Sie können vielleicht die kombinierte Sammlung verwenden, alle Elemente im Stackpanel kombinieren und alle in einer Listbox mit aktivierter Virtualisierung anzeigen. Wenn Sie den Code teilen, werde ich versuchen, Ihnen dabei zu helfen. – pushpraj
Aktualisiert, um Beispielprojekt – jayars