所有
所以我已经将LINQ-to-SQL中的所有选择查询转换为使用CompiledQueries来加快速度。目前为select语句工作得很好,但我无法弄清楚如何预编译插入,更新或删除语句。
当然,当您在LINQ-to-SQL中插入,删除或更新时,必须使用对象模型。但显然在它生成查询的过程中,预编译和存储在静态成员中会很好。
这可能吗?什么是LINQ性能,如更新,删除和插入时,它没有预编译?我可以看到它比选择快得多,因为他们在下面做的更简单,更少“动态”......
答案 0 :(得分:8)
有很大的不同。 Linq-To-SQL选择查询可以是大型复杂表达式树。这些可能需要一段时间“编译”。在这种情况下,合并到一些可以针对SQL Server运行的T-SQL。因此,缓存操作的结果以便可以重复使用是有意义的。
然而,其他Delete,Update和Insert是简单的操作,不需要将表达式树转换为T-SQL(LINQ本身就是查询)。很遗憾我们已经接受过训练,可以将SQL代码视为“查询”来执行这些其他操作,我们并不是要求任何信息。
这些操作仅由DataContext定义,而不是由LINQ定义,因此已经编译了执行这些函数的代码。
答案 1 :(得分:3)
我认为只有三个插入才有意义才能编译和重用,因为删除很简单(DELETE FROM Table WHERE Key ...)而UPDATE只更新已更改的字段,因此每个更新操作。
[)amien
答案 2 :(得分:0)
L2S使用“sp_executeSQL”,因此在第一次运行它之后,它将存储在存储过程执行计划缓存中。后续运行(相同查询 - 不是相同的参数)将重用缓存中的编译计划。所以你要求的是由SQL Server“幕后”自动处理。