c# – 为什么AddRange比使用foreach循环更快?

c# – 为什么AddRange比使用foreach循环更快?,第1张

概述var fillData = new List<int>();for (var i = 0; i < 100000; i++){ fillData.Add(i);}var stopwatch1 = new Stopwatch();stopwatch1.Start();var autoFill = new List<int>();autoFill.AddRange(fill
var fillData = new List<int>();for (var i = 0; i < 100000; i++){     fillData.Add(i);}var stopwatch1 = new Stopwatch();stopwatch1.Start();var autoFill = new List<int>();autoFill.AddRange(fillData);stopwatch1.Stop();var stopwatch2 = new Stopwatch();stopwatch2.Start();var manualFill = new List<int>();foreach (var i in fillData){    manualFill.Add(i);}stopwatch2.Stop();

当我从stopwach1和stopwach2获取4个结果时,stopwatch1的值始终低于stopwatch2.这意味着addrange总是比foreach更快.
有谁知道为什么?

解决方法 潜在地,AddRange可以检查传递给它的值在何处实现IList或IList< T>.如果是这样,它可以找出该范围内有多少值,因此需要分配多少空间……而foreach循环可能需要重新分配几次.

另外,即使在分配之后,List< T>可以使用IList<T>.CopyTo来执行批量复制到底层数组(当然,对于实现IList< T>的范围).

我怀疑你会发现,如果你再次尝试测试,但是使用Enumerable.Range(0,100000)来表示fillData而不是List< T>,那么两者将花费大约相同的时间.

总结

以上是内存溢出为你收集整理的c# – 为什么AddRange比使用foreach循环更快?全部内容,希望文章能够帮你解决c# – 为什么AddRange比使用foreach循环更快?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1214508.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存