代码之家  ›  专栏  ›  技术社区  ›  Ali Tarhini

Linq什么时候优于ADO.NET?

  •  2
  • Ali Tarhini  · 技术社区  · 14 年前

    我们知道Linq是一个构建在ADO.NET堆栈顶部的层。这是一个非常好的特性,使数据库查询变得更好,但是LINQ是一个附加层,因此它增加了一些开销,可以将LINQ查询转换为SQL查询并映射回结果,而在ADO.NET中,我们直接编写SQL查询。

    我的问题是,什么时候LINQ的执行速度比使用普通ADO.NET方法快?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Jon Hanna    14 年前

    您将始终能够使用从ADO访问的存储过程将LINQ备份到数据库,然后直接对其执行操作,或者(如果必须处理对象)使用手头任务所需的数据量构造对象。

    但是,Linq让我们能够非常快速地创建一个查询,通过返回匿名对象返回该任务所需的信息。

    要对每个查询的自定义代码执行相同的操作,需要要么不停止处理其他层的ADO(在多个方面存在问题),要么创建大量重复其大部分功能但不共享代码的对象。

    所以,虽然它可以在性能上被击败,但在这种情况下,如果没有 许多 相当重复的代码。它还可以在性能上击败更自然的方法(用我们不会使用的膨胀返回实体对象)。

    最后,即使在它没有获胜的情况下,它仍然可以更快地编写,并且更清楚地说明操作与实体的定义方式有关(后一个是我非常喜欢它的主要原因)。

        2
  •  7
  •   Jon Skeet    14 年前

    当以原始SQL编写所有这些查询和管理所有其他翻译等方式节省的时间允许您花费更多时间查找性能瓶颈时。

    Linq并不是要超越SQL。这是为了使代码更简单、更清晰,所以您可以集中精力处理更重要的方面。有时,查询的自然LINQ表达式最终得到的SQL速度可能会比您自己想到的要快——尽管也有很多时候会发生相反的情况。您仍然应该查看正在生成的SQL,并对其进行相应的分析。