c# – 迭代Linq结果时出现奇怪的缓慢
发布时间:2020-12-15 19:54:46 所属栏目:百科 来源:网络整理
导读:在探索最近的 Linq question时,我注意到算法似乎相当慢.深入挖掘我注意到它不是linq代码,但结果的输出后来耗费了很长时间. (感谢Marc Gravel顺便说一句,我已经看过了最简单的Linq.) 码: DateTime dt = DateTime.Now; Console.WriteLine("Alg Start " + dt.S
在探索最近的
Linq question时,我注意到算法似乎相当慢.深入挖掘我注意到它不是linq代码,但结果的输出后来耗费了很长时间. (感谢Marc Gravel顺便说一句,我已经看过了最简单的Linq.)
码: DateTime dt = DateTime.Now; Console.WriteLine("Alg Start " + dt.Second + "." + dt.Millisecond); var qry = from l in Enumerable.Range(100000,999999) let s = l.ToString() let sReversed = new string(s.Reverse().ToArray()) from i in Enumerable.Range(3,9) let t = (l * i).ToString() where t == sReversed select new { l,i }; dt = DateTime.Now; Console.WriteLine("Alg End " + dt.Second + "." + dt.Millisecond); foreach (var row in qry) Console.WriteLine("{0} x {1} = {2}",row.l,row.i,row.l * row.i); dt = DateTime.Now; Console.WriteLine("Disp End " + dt.Second + "." + dt.Millisecond); 输出: Alg Start 20.257 Alg End 20.270 109989 x 9 = 989901 219978 x 4 = 879912 1099989 x 9 = 9899901 Disp End 31.322 .13秒计算和超过11来显示?!?这是什么原因? 解决方法
原因是在枚举之前查询实际上不会运行.在LINQ to对象中,它只是设置了一堆代理,当你遍历枚举器时会被调用.如果您要在查询中添加ToList()以实现它,您会看到所花费的时间将转移到设置并远离显示.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容