我刚刚创建了一个非常简单的应用程序。我在启动时加载10000个对象并将其绑定到ListView,如下所示:
<ListView Grid.Row="3" ItemsSource="{Binding Objects}" VirtualizingStackPanel.IsVirtualizing="False">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
之后我将它绑定到DataGrid:
<DataGrid Grid.Row="3" ItemsSource="{Binding Objects}" />
表现差异很大。 ListView:加载时间 - 不到一秒,内存使用量150 MB,清洗137MB后 DataGrid:加载时间 - 几秒钟,内存使用量600MB,清理对象集合后下降到500MB
我最担心的是,即使收集是空的,它也不会清理所有东西。在DataGrid中必须泄漏一些东西。我已经阅读了一些关于它的建议并且建议不要使用DataGridCellTemplate并在绑定项中实现INotifyPropertyChanged,但它没有帮助。有什么想法吗?