在探索最近的Linq问题时,我注意到算法似乎非常缓慢。深入挖掘后,我发现不是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
计算需要 0.13 秒,但显示需要超过 11 秒?这是什么原因?