2


我发现一个非常有趣的页面:http: //msdn.microsoft.com/en-us/library/cc853327.aspx

在这里您可以看到在查询阶段,有一个名为“生成视图”的阶段会花费很多。尽管 EF 提供了一些方法来预编译它,但是如果你有很多没有预编译的查询,你仍然可能会遇到问题。

您可以在此处找到如何:预生成视图以提高查询性能:http: //msdn.microsoft.com/en-us/library/bb896240.aspx

在这里,您可以看到没有预生成的查询将花费两倍的时间。所以这意味着它确实要花很多钱。http://blogs.msdn.com/b/appfabriccat/archive/2010/08/06/isolating-performance-with-precompiled-pre-generated-views-in-the-entity-framework-4.aspx

所以我有一个问题,为什么EF设计这个阶段?NHibernate也有这个阶段吗?如果是真的,它在 Nhibernate 中的表现如何?

4

1 回答 1

3

EF 视图与 SQL 视图无关 - EF 视图是编译成可执行代码的映射转换。EF 使用这些转换将其查询表示转换为目标 SQL 表示。这种编译的原因是整个应用程序的性能——您需要花时间进行初始化,但所有后续查询和更新都将使用编译后的代码,而不是在 EDM 中进行一些查找。如果您不需要在运行时修改映射,您甚至可以在编译应用程序期间预编译这些视图。

EF 视图用于查询准备(将一种表示形式转换为另一种表示形式),但必须为每个唯一查询完成查询准备。在 EF 4 中,除非您手动使用Compiled query,否则不会缓存此准备工作。在 EF 4.5 和 5.0 (.NET 4.5) 中,所有查询都会自动“编译”= 有缓存,每个唯一查询实际上只准备一次。相同查询的后续执行使用缓存中的编译版本。

您可以在此初学者指南中阅读有关性能和 EF 5.0 的更多信息。

于 2012-08-02T08:19:13.763 回答