Joh*_*0te 4 c# linq optimization .net-4.0 type-conversion
我一直在我正在编写的应用程序中大量使用LINQ查询,并且我一直在遇到的一种情况是必须将LINQ查询结果转换为列表以便进一步处理(我有我的理由想要清单).
我希望能够更好地了解此列表转换中发生的情况,以防自从我现在重复使用它以来效率低下.所以,给定我执行这样的折线:
var matches = (from x in list1 join y in list2 on x equals y select x).ToList();
问题:
除了从查询返回的枚举中的元素的引用创建新列表及其填充之外,这里是否有任何开销?
你认为这效率低吗?
有没有办法让LINQ查询直接生成一个列表,以避免在这种情况下需要转换?
好吧,它会创建一个数据副本.这可能效率低下 - 但这取决于发生了什么.如果你最后需要一个List<T>,List<T>通常会接近你能得到的效率.一个例外是,如果你打算只是做一个转换和源已经是一个名单-然后使用ConvertAll效率会更高,因为它可以创建大小合适的支持数组开始.
如果您只需要流式传输数据 - 例如,您只是要对其foreach进行操作,并采取不影响原始数据源的操作 - 那么调用ToList肯定是低效率的潜在来源.它将迫使整个list1评估 - 如果这是一个懒惰评估的序列(例如"来自随机数发生器的前1,000,000个值")那么那就不好了.需要注意的是,你正在做一个连接,list2将被评估反正只要你尝试拉从序列的第一个值(不管是为了填充列表或没有).
您可能希望在后台ToList阅读我的Edulinq帖子,看看发生了什么 - 至少在一个可能的实现中.
| 归档时间: | 
 | 
| 查看次数: | 2972 次 | 
| 最近记录: |