代码之家  ›  专栏  ›  技术社区  ›  Vaccano

LINQ是更快、更慢还是相同?

  •  5
  • Vaccano  · 技术社区  · 14 年前

    是这样的:

    Box boxToFind = AllBoxes.FirstOrDefault(box => box.BoxNumber == boxToMatchTo.BagNumber);
    

    比这快或慢:

    Box boxToFind ;
    foreach (Box box in AllBoxes)
    {
        if (box.BoxNumber == boxToMatchTo.BoxNumber)
        {
            boxToFind = box;
        }
    }
    

    两者都给我我想要的结果( boxToFind )这将运行在一个移动设备上,我需要认真履行。

    8 回复  |  直到 7 年前
        1
  •  8
  •   SLaks    14 年前

    应该差不多,除了你需要打电话 First (或者,为了匹配您的代码, Last ),而不是 Where .
    打电话 在哪里? 会给你一套匹配的物品 IEnumerable<Box> );您只需要一个匹配项。

    通常,在使用LINQ时,需要注意延迟的执行。在您的特定情况下,这是不相关的,因为您得到的是一个项目。

        2
  •  8
  •   Samuel Neff    14 年前

    区别并不重要,除非您已经通过分析将这个特定的循环识别为性能瓶颈。

    如果分析确实发现这是一个问题,那么您将希望查找备用存储。将数据存储在字典中,字典提供的查找速度比通过数组循环更快。

        3
  •  2
  •   Ta01    14 年前

    如果微观优化是你的事情,Linq的表现会更差, this is just one article ,你可以找到很多其他的帖子。

        4
  •  1
  •   p.campbell    13 年前

    微观优化会杀了你。
    首先,完成整个类,然后,如果您有性能问题,运行一个分析器并检查应用程序的热点。
    确保你用的是你能用的最好的算法, 然后 转向这样的微观优化。

    如果你已经这样做了:
    慢&快
    linq<foreach<for<unsafe for(不建议使用最后一个选项)。
    抽象将使代码变慢,95%的时间。

        5
  •  0
  •   azamsharp    14 年前

    最快的是当你使用for循环时。但是差别太小了,以至于你忽略了它。只有在构建实时应用程序时才重要,但对于这些应用程序而言,也许C不是最佳选择!

        6
  •  0
  •   Rauhotz    14 年前

    如果allbox是一个iqueryable,它可能比循环更快,因为queryable可以有一个优化的where操作实现(例如索引访问)。

        7
  •  0
  •   BO JAGLES    7 年前

    LINQ绝对慢100%

    这取决于你在你的程序中试图完成什么,但在大多数情况下,这无疑是我所说的懒惰的程序员代码…

    如果您正在执行任何复杂的查询、联接等,那么您将基本上“拖延”。这些类型的函数/方法的总P.O.S—只是不要使用它。如果你做这件事的努力/漫长的路,从长远来看你会更快乐……而表现将是一个世界的不同。

    注释 :

    对于为速度/同步任务/计算而构建的任何程序,我绝对不推荐使用LINQ。 (例如,高频交易和/或以交易I-0-I为起点)。

    测试 :

    在“linq”和“lt;1毫秒”之间完成连接需要近10秒。

        8
  •  -2
  •   Huy Nguyen    11 年前

    Linq vs Loop A性能测试

    LINQ: 00:00:04.1052060, avg. 00:00:00.0041052
    Loop: 00:00:00.0790965, avg. 00:00:00.0000790
    

    参考文献:

    http://ox.no/posts/linq-vs-loop-a-performance-test

    http://www.schnieds.com/2009/03/linq-vs-foreach-vs-for-loop-performance.html