2009-02-20 9 views
6

Ich habe ein Fenster mit einem WPF ListView/GridView an eine ObservableCollection gebunden. Die Aufführung ist absolut entsetzlich. Die Anwendung drosselt beim Versuch, 300-400 Elemente und CPU-Nutzungsspitzen zu laden, jedes Mal, wenn ein Element hinzugefügt/entfernt/geändert wird. Profiling offenbart nichts Offensichtliches.WPF listview/gridview Leistung schrecklich, Vorschläge

Wer hat irgendwelche Vorschläge?

+0

Die Datatemplate verwendet wird, enthält einen einzigen Textblock. –

Antwort

2

Erste Vermutung, verwenden Sie komplexe Datenvorlagen für jedes ListViewItem? Dies kann alles sein, von vielen Bildern über (alte) BitmapEffects bis hin zu Lazy-Loaded-Eigenschaften, die Daten bei Bedarf aus einer Datenbank abrufen (was dazu führen kann, dass Sie viele db-Aufrufe ausführen, um jedes Visual zu rendern, abhängig von Ihrem Datenmodell funktioniert).

Zweitens, ist die Liste selbst in der Lage, ihre Load/Add/Modified/Removed-Routinen schnell auszuführen (was bedeutet, dass das Problem beim Rendern der Daten auftritt), oder führt die Liste selbst diese Jobs langsam aus (was die Liste anzeigt) eine Art Problem).

+0

Das verwendete DataTemplate enthält einen einzelnen TextBlock. –

+0

Es werden keine Datenbankaufrufe durchgeführt. –

+0

Können Sie ein wenig mehr von Ihrem Code teilen, der Ihr Problem reproduziert? Vielleicht eine einfache neue Lösung, die das Nötigste dafür schafft? – Adrian

7

Schauen Sie sich diese Eigenschaften aus:

VirtualizingStackPanel.IsVirtualizing="True" 
VirtualizingStackPanel.VirtualizationMode="Recycling" 
ScrollViewer.IsDeferredScrollingEnabled="True" 
1

Und das offensichtlichste, stellen Sie sicher Upgrade 3.5 SP1 auf .net, es gab es eine Menge Performance-Gewinne.

Es lohnt sich auch, in das WPF-Datagridview-Steuerelement zu schauen, da viele der Performance-Arbeiten in .net 3.5 SP1 so waren, dass das Datagridview eine gute Leistung auf großen Datasets hätte.

http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25047

Verwandte Themen