7

全部,

因此,我已将 LINQ-to-SQL 中的所有选择查询转换为使用 CompiledQueries 来加快速度。到目前为止,对于选择语句来说效果很好,但我无法弄清楚如何预编译插入、更新或删除语句。

当然,当您在 LINQ-to-SQL 中插入、删除或更新时,您必须使用对象模型。但显然它在生成查询的过程中的某个地方,可以很好地预编译并存储在静态成员中。

这可能吗?未预编译时,更新、删除和插入的 LINQ 性能如何?我可以看到它比选择要快得多,因为它们在下面做的事情要简单得多,而且“动态”更少……

4

3 回答 3

8

有一个很大的不同。Linq-To-SQL 选择查询可以是大型复杂的表达式树。这些可能需要一些时间“编译”。在这种情况下,合并到一些可以针对 SQL Server 运行的 T-SQL。因此,缓存操作的结果以便可以重复使用是有意义的。

然而,其他删除、更新和插入都是简单的操作,不需要将表达式树转换为 T-SQL(LINQ 本身就是关于查询的)。不幸的是,我们被训练将执行这些其他操作的 SQL 代码视为“查询”,我们实际上并没有询问任何信息。

这些操作仅由 DataContext 而非 LINQ 定义,因此执行这些功能的代码已经编译。

于 2008-12-09T21:46:17.587 回答
3

我认为三个唯一的插入对于能够编译和重用是有意义的,因为删除非常简单(从表中删除键...)并且更新只更新已更改的字段,因此每次更新操作都会有所不同。

[]亚眠

于 2008-12-10T06:03:29.923 回答
0

L2S 使用“sp_executeSQL”,因此在您第一次运行它后,它将在存储过程执行计划缓存中。随后的运行(相同的查询 - 不同的参数)将重用缓存中的编译计划。因此,您所要求的将由 SQL Server“在幕后”自动处理。

于 2008-12-10T11:43:48.130 回答