C# 中 Linq查询结果的循环性能改进
对linq查询结果进行迭代时,linq才去执行查询,就是说{在迭代时,才真正执行}.这是延迟操作的一种性能提升的表现.
但试想下,需要对结果进行第2次,第3次...,那么这种延迟执行,却是性能的一个瓶颈.
测试如下代码:
得出一个结论:
查询结果返回后,马上调用 ToList() 方法,那么以后再循环时就不会再去执行查询了.
可从上面的代码看, ToList() 执行一次查询,遍历了所有元素,第三次for时,后遍历了一次(虽然不是所有元素).
试想下,集合中如果有100,1000,1万个元素时...
解决思路:
在循环迭代查询结果时,便将结果保存到一个结果集合中,下次循环迭代时,从这个结果集合中进行循环迭代
性能测试代码:
sw.Start(); for (int i = 0; i < times; i++) { //Console.WriteLine(i); foreach (var u in r3) { var s = "a" + u.ToString(); s += ""; } } sw.Stop(); Console.WriteLine(sw.Elapsed); sw.Reset();