2010-11-26 43 views
2

我们知道linq是ado.net堆栈顶层的一个层。这是非常好的功能,并使数据库查询好得多,但linq是一个额外的层,因此它增加了一些开销,将linq查询转换为sql查询并映射回ado.net中的结果,而我们直接编写sql查询。LINQ何时胜过ado.net

我的问题是什么时候linq执行比使用正常的ado.net方法更快。

+2

当程序员不知道ado.net的复杂性:) – basarat 2010-11-26 21:29:29

回答

2

你总是能够击败LINQ支持一个存储过程从ADO访问的数据库,然后直接作用或(如果你必须处理对象)用来构造一个只有大量数据的对象手头任务需要。

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

要对每个查询的自定义代码做同样的事情,需要不停止处理其他层的ADO(以多种方式填充)和/或创建大量重复其大部分功能的对象,但不分享代码。

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

最后,即使在没有获胜的情况下,它的写作速度仍然会更快,而且操作更加清晰,这与实体的定义方式有关(后者是我非常喜欢的主要原因)它)。

7

当在原始SQL中编写所有这些查询以及管理所有其他翻译等时所节省的时间使您可以花更多时间找到性能瓶颈。

LINQ不是性能优于SQL的。这是关于使代码更简单和更清晰,所以你可以专注于更重要的方面。有时可能有些时候,查询的自然LINQ表达式会以比你自己想出的更快的SQL结束 - 虽然也有很多次会发生相反的情况。您仍应该查看正在生成的SQL,并相应地对其进行分析。

+1

+1:它并不总是关于更高效的代码。这是关于什么是更有效的业务。丢失几个时钟周期,同时节省大量的开发人员时间是LINQ经常“胜过”ADO .NET的一种方式。 (并不总是,但经常。) – David 2010-11-26 21:39:55