如何解决ObservableCollection 和 List 中的 Remove() 方法导致大量数据的性能问题
我使用了 50 万条记录的 observable 集合。在某些情况下,我想使用 Foreach 循环删除这些记录。删除 500k 条记录需要 1 多分钟。同样的列表收集也需要 1 分钟。有没有办法提高可观察集合的性能?
ObservableCollection<string> collection;
collection = new ObservableCollection<string>();
for(int i=0; i< 500000; i++)
{
collection.Add("Item" + i);
}
private void RemoveBtn_Click(object sender,RoutedEventArgs e)
{
var items = collection.ToList();
foreach (var item in items)
{
collection.Remove(item);
}
}
解决方法
您的代码似乎很浅薄地将集合克隆到列表中,然后删除系列中的每个项目。这是故意的吗?如果您尝试清除整个列表,collection.Clear()
的性能会更好。
如果您已经知道要删除的对象的索引,那么使用 collection.RemoveAt(i)
而不是 collection.Remove(e)
可能会更快,后者实际上是执行 IndexOf
然后RemoveAt
内部。见https://referencesource.microsoft.com/#System/compmod/system/collections/objectmodel/observablecollection.cs,f63ea2601f5edbbb。
根据您的对象,equals 比较也可能会导致速度变慢(由 IndexOf
使用)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。