Sto usando uno StackPanel per impaginare più controlli verticalmente (es. Titolo, sottotitoli, listbox, separatore, listbox, ecc.).Migliora le prestazioni per un enorme ListBox in StackPanel?
StackPanel è figlio di ScrollViewer per garantire che il suo contenuto sia sempre scorrevole.
Uno dei controlli di StackPanel è un ListBox.
L'oggetto ItemsSource è collegato a una vasta raccolta e viene utilizzato un DataTemplate complesso per la realizzazione di ciascun elemento.
Sfortunatamente, sto ottenendo prestazioni davvero scarse (alta CPU/memoria) con esso.
ho cercato
- impostazione ItemsPanel del ListBox a un VirtualizingStackPanel, e
- sovrascrivendo la sua ControlTemplate a solo ItemsPresenter (rimuovere ScrollViewer del ListBox).
Ma non ci sono state differenze nelle prestazioni. Immagino che StackPanel dia ai suoi figli interni un'altezza infinita durante la misurazione?
Quando ho sostituito lo ScrollViewer e StackPanel con altri pannelli/layout (per esempio, griglia, DockPanel) e la performance migliora in modo significativo, il che mi porta a credere che il collo di bottiglia, così come la soluzione, è nella virtualizzazione.
Esiste un modo per migliorare le prestazioni della cpu/memoria di questa visualizzazione?
[Update 1]
progetto di esempio originale: http://s000.tinyupload.com/index.php?file_id=29810707815310047536
[Aggiornamento 2]
ho cercato di restyling/template TreeView/TreeViewItems a venire con il seguente esempio. Ci vuole ancora molto tempo per iniziare/lo stesso, un elevato utilizzo della memoria. Ma una volta caricato, lo scrolling si sente molto più reattivo rispetto al campione originale.
Chiedo se c'è un altro modo per migliorare ulteriormente il tempo di avvio/l'utilizzo della memoria?progetto
Restyled TreeView: http://s000.tinyupload.com/index.php?file_id=00117351345725628185
[Update 2] soluzione
di pushpraj funziona come un fascino
- originale:
- avvio: 35s,
- memoria : 393 MB
- Scrolling:
- avvio:: 18s,
- memoria 377MB,
- Scrolling: soluzione rapida
- di pushpraj:
- TreeView lento
- avvio : < 1s,
- Memoria: 20MB,
- Scrolling: veloce
fissaggio altezza massima della casella di riepilogo causerebbe 2 barre di scorrimento ad apparire (vedi http://i.imgur.com/s1MJ6BO.png?1) – jayars
questo è vero, ma allo stesso tempo la virtualizzazione può funzionare solo quando l'altezza è fissa o l'altezza massima è definita, non può funzionare per un'altezza illimitata. Potresti forse utilizzare la raccolta composita combinare tutti gli elementi nello stackpanel e visualizzarli tutti in una listbox con la virtualizzazione abilitata. potresti condividere il codice, cercherò di aiutarti con quello. – pushpraj
Aggiornato per includere il progetto di esempio – jayars