ObservableCollection清除速度很慢

时间:2015-07-10 11:08:26

标签: c# wpf observablecollection

我有ObservableCollection<MyClass>个实例,其中包含20个元素,并为控件设置为ItemsSource。当我尝试为此集合调用Clear()时,它变得干净,但在冻结应用程序4-5秒后。如果我不使用它像依赖属性的值它会快速清除。当我只运行(在Visual Studio中按Ctrl + F5)应用程序而不是调试时,它也不需要任何时间。

使用ObservableCollection时从未遇到过如此缓慢的问题,并且不了解如何解决此问题(即使,但未显示分析延迟)。我使用ItemsSource属性开发控件,因此我无法取消分配属性值 - 清除集合 - 再次设置属性值。我的自定义控件的处理程序工作得很快。并且应用程序在Clear()调用之后和我的自定义INotifyCollectionChanged.CollectionChanged事件处理程序之前冻结。

1 个答案:

答案 0 :(得分:0)

好吧,在制作自己的数据网格时,我建议每个人检查标准的wpf控件以及他们如何使用enumarables进行管理。 在为我的自定义网格创建单元格的项目中,我做了一些这样的操作,将集合元素设置为单元格的DataContext

cellContainer.SetBinding(Grid.DataContextProperty, new Binding
{
    Path = new PropertyPath(string.Format("ItemsSource[{0}]", rowIndex)),
    ElementName = "myUserControl"
});

它是无用的绑定,它使WPF跟踪每个单元格的集合变化并花费很多时间。更好的方法是简单地将项目值分配给单元容器的DataContext,如:

cellContainer.DataContext = myUserControlInstance.ItemsSource
    /*.OfType<object>.Skip(rowIndex).FirstOrDefault() or for ILists:*/[rowIndex];