LINQ优化问题

时间:2009-04-03 16:54:43

标签: c# .net linq optimization

所以我一直在使用LINQ,我有一个问题。

我有一组对象。它们根据其属性值分为两类。我需要为一个组设置一个不同的属性,为另一个组设置一种方式:

foreach(MyItem currentItem in myItemCollection)
{
    if (currentItem.myProp == "CATEGORY_ONE")
    {
        currentItem.value = 1;
    }
    else if (currentItem.myProp == "CATEGORY_TWO")
    {
         currentItem.value = 2;
    }
}

或者,我可以做类似的事情:

myItemCollection.Where(currentItem=>currentItem.myProp == "CATEGORY_ONE").ForEach(item=>item.value = 1);
myItemCollection.Where(currentItem=>currentItem.myProp == "CATEGORY_TWO").ForEach(item=>item.value = 2);

我认为第一个更快,但认为检查不会有什么坏处。

3 个答案:

答案 0 :(得分:6)

只遍历集合一次(并且不调用任何委托,而不是使用尽可能多的迭代器)可能会稍微快一点,但我非常怀疑它是否会很重要。

编写完成工作的最易读的代码,只有在出现问题时才会担心微观层面的性能(即容易更改的位置)。

我认为在这种情况下,第一段代码更具可读性。更少LINQy,但更具可读性。

答案 1 :(得分:4)

这样做怎么样?

myItemCollection.ForEach(item => item.value = item.myProp == "CATEGORY_ONE" ? 1 : 2);

答案 2 :(得分:3)

真实答案

只有一个分析器才会真正告诉你哪一个更快。

模糊答案

第一个在原始速度方面很可能更快。

有两个原因
  1. 该列表只进行一次迭代
  2. 第二个为列表中的每个元素询问2个委托调用。
  3. 真正的问题是“两种解决方案之间的速度差异是否重要?”这是与您的应用程序相关的唯一问题。只有分析才能真正为您提供大量数据。