EF 4.2自动编译的linq查询的影响

时间:2011-09-07 16:06:41

标签: .net entity-framework

来自MSDN magazine

  

June CTP支持一项名为Auto-Compiled LINQ的新功能   查询,允许每个LINQ to Entities查询您执行   自动编译并放入EF查询缓存中。一切   您随后运行查询的时间,EF将在其查询中找到它   缓存,不必经历整个编译过程   试。

我认为建议只编译经常运行的查询,因为编译查询需要时间?那么编译过程是否已经改进,建议这样做?

感谢。

1 个答案:

答案 0 :(得分:3)

有两篇关于自动编译查询的文章(ADO.NET team blogJulie Lerman's blog),可以让您对性能有所了解。自动编译查询和性能的要点是什么:

  • 可以全局关闭此功能
  • 可以根据ObjectQuery控制该功能(但目前存在一些问题)
  • 如果没有太多的内部知识,我认为即使对于很少使用的查询,该功能也应该更快 - 它只会增加内存消耗。如果每次都编译了查询,那么表达式树必须每次遍历并解释为参数化SQL(我检查过一次内部实现,它确实遵循构建编译器/解释器的一些规则)。我做了一些非常快速的检查这个新的缓存实现,看起来自动编译将在内部存储用于执行查询的DbCommand原型。因此,下次调用查询时必须完成的唯一事情是遍历表达式树并计算其哈希值,以查找缓存的DbCommand并创建将要执行的克隆。

但这些主要是我的假设,所以只有现实世界的用法才会表明它是否真的如此。