嵌套Linq比foreach循环更快?

时间:2017-03-07 03:32:22

标签: c# linq foreach

这是“更好”,更快还是更容易阅读:

 var viewsOnSheet = templateSheet.GetAllViewports()
    .Select(x => doc.GetElement(x))
    .Cast<Viewport>()
    .Select(x => doc.GetElement(x.ViewId))
    .Cast<View>();

......比这个:

foreach (ElementId id in templateSheet.GetAllViewports())
{
    Viewport vp = doc.GetElement(id) as Viewport;
    View v = doc.GetElement(vp.ViewId) as View;
}

他们都工作,我只是好奇是否有一些编程标准,我会违反这么多嵌套的Linq调用。什么更容易理解?我个人倾向于foreach循环。

谢谢!

1 个答案:

答案 0 :(得分:3)

对于Linq到对象,具有foreach的代码总是略微快于等效的LINQ调用,因为在最后LINQ在几次方法调用之后最终会出现类似的foreach。对于Linq-to-SQL / Linq-to-XML等效代码,使用较少的函数调用也会更快,因为您执行的代码更少。

请注意,更复杂的LINQ表达式的正确匹配代码可能不容易编写(尝试正确编写GroupBy)并且肯定不会短于LINQ。

这种性能对您的应用程序是否重要 - 根据您的特定性能目标来衡量自己。

代码风格严格取决于个人偏好 - 选择适合您/您团队的代码。