我正在为 ObservableCollection 编写一个扩展方法,并且已了解到 .Add 函数每次调用都会引发 3 个属性更改事件,
所以这样的事情是一个坏主意:
public static void AddRange<T>(this ObservableCollection<T> oc, IEnumerable<T> collection)
{
if (collection == null) { throw new ArgumentNullException("collection"); }
foreach (var i in collection) { oc.Add(i); }
}
还有其他解决方案吗?
最佳答案
鉴于Concat<T>
是一个扩展方法,几乎可以肯定它只是调用 .Add()
在幕后,它不可能拥有类(class)的内部知识。您可以使用 ildasm.exe 来确定发生了什么。
在这种情况下,我使用 ObervableCollection<T>
遇到了性能问题。几年前。我最终得出的解决方案是实现 IList<T>
和INotifyCollectionChanged
使用自定义实现,支持引发具有实际集合增量的单个 CollectionChanged 事件(而不是每个项目的事件),以响应对 AddRange<T>
的调用。查看 NotifyCollectionChangedEventArgs 的文档以获取详细信息。
关于c# - ObservableCollection.AddRange 的最佳性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22154291/