首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BindableCollection<> AddRange slow

BindableCollection<> AddRange slow
EN

Stack Overflow用户
提问于 2014-04-10 14:00:20
回答 1查看 1.3K关注 0票数 2

添加到BindableCollection的更好的解决方案,似乎真的很慢,超过1000个对象被添加。除非我错过了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-19 19:56:06

我认为AddRange慢的原因是很多NotifyOnPropertyChanged事件都被触发了。杯标本身不会在添加范围时引发事件,但BindableColletion调用它的基ObservableCollection.InsertItem,这反过来会对每个项触发OnPropertyChanged和OnCollectionChanged。将BindableColletion复制到临时List<>,将长列表复制到它并创建一个新的BindableCollection(临时)似乎更快。

我写了一个短期基准。注意,本例中的BindableCollection实际上没有绑定到任何东西,因此在现实世界中,好处应该更大。

代码语言:javascript
复制
   private static void Main()
        {
            DateTime startTime;
            TimeSpan elapsedTime;
            var longList = new List<int>(Enumerable.Range(1, 10000000));
            var bindableInts = new BindableCollection<int>(Enumerable.Range(1, 100));

            startTime = DateTime.Now;
            bindableInts.AddRange(longList);
            elapsedTime = DateTime.Now - startTime;

            Console.WriteLine("Time using AddRange: " + elapsedTime);

            bindableInts = new BindableCollection<int>(Enumerable.Range(1, 100));

            startTime = DateTime.Now;
            var temp = new List<int>(bindableInts);
            temp.AddRange(longList);
            bindableInts = new BindableCollection<int>(temp);
            elapsedTime = DateTime.Now - startTime;

            Console.WriteLine("Time using `temp List<>`: " + elapsedTime);
            Console.ReadLine();
        }

输出:

使用AddRange: 00:00:00.7310548的时间

使用临时List<>:00:00:00.1750151的时间

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22990250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档