【发布时间】:2016-01-06 17:15:33
【问题描述】:
如何比较这两个迭代以确定哪个最有效?
Process.GetProcessesByName("EXCEL")
.Where(p => p.StartTime >= _createdOn)
.ToList()
.ForEach(p => p.Kill());
对
foreach (var proc in Process.GetProcessesByName("EXCEL").Where(p => p.StartTime >= _createdOn))
proc.Kill();
【问题讨论】:
-
使用诊断名称空间中的秒表计时(假设您的意思是手动)。但是,您确实在 VS 中有某些工具可以让您分析您的代码。
-
但要注意过早的优化。除非您发现严重的性能问题,否则这可能不是问题。
-
Semi-relevant blog post - 或许不是第一点,但其余的关于它是否值得担心。
-
非常好的点。我想知道它是否对时间很重要。对于这种情况(因为两者都很快),我不确定效率是否可以通过时间来衡量。我想知道每个如何编译为 CLR。
-
我同上上述 cmets,基于我对您的代码上下文所做的假设 - 我会说性能差异可以忽略不计。但请注意 - 在某些情况下,是否调用
ToList之间的区别可能绝对很重要。ToList将去获取整个集合(例如,从数据库中),而在需要时迭代一个实现良好的 IEnumerable 可能MoveNext。这称为延迟加载,它可能很重要。