C#学习教程:将IEnumberable转换为ListonLINQResult导致巨大的性能损失列表list=result.ToList();但是,ToList真的很慢,它是否使列表可变,所以转换很慢?在大多数情况下,我可以设法获取我的IEnumerable或Paralell.DistinctQuery,但现在我想将项目绑定到DataGridView,因此我需要使用其他东西而不是IEnumerable,关于如何获取ToList或任何性能替代的任何建议?在IEnumerable中有1000万条记录时,.ToList大约需要6秒。.ToList()比什么慢?如果你比较varresult=fromxinItemsselectx;列表list=result.ToList();tovarresult=fromxinItemsselectx;您应该注意到,由于查询是延迟计算的,因此第一行没有做太多。它不会检索任何记录。惰性执行使这种比较完全不公平。这是因为LINQ喜欢偷懒,尽可能少做工作。这行:varresult=fromxinItemsselectx;尽管您选择了名称,但它实际上并不是结果,它只是一个查询对象。它不会获取任何数据。列表list=result.ToList();现在你实际上已经请求了结果,所以它必须从源中获取数据并复制它。ToList保证复制。考虑到这一点,第二条线比第一条线慢得多也就不足为奇了。不,不是创建列表需要时间,而是获取数据需要时间。您的第一行代码实际上并没有获取数据,它只是设置了一个能够获取数据的IEnumerable。当您调用ToList方法时,它实际上会获取所有数据,这就是为什么所有执行时间都在第二行的原因。您还应该考虑在网格中有1000万行是否有用。没有用户会查看所有行,因此它没有任何意义。也许您应该提供一种在获取任何数据之前过滤结果的方法。我认为这是因为内存重新分配:ToList无法提前知道集合的大小,因此它可以分配足够的存储空间来容纳所有项目。因此,当List增长时,必须重新分配它。如果您可以估计结果集的大小,则使用List(int)构造函数重载预分配足够的元素,然后手动向其中添加项目会快得多。以上是C#学习教程:在LINQ结果上将IEnumberable转成List,导致性能损失巨大。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自网络收藏,不代表立场,如涉及侵权,请右击联系管理员删除。如需转载请注明出处:
