EF6查询预编译

时间:2015-04-24 13:38:42

标签: entity-framework linq-to-entities entity-framework-6

有没有办法预编译EF查询,以便应用程序无需编译它(即使它是第一次执行)?

我有很多复杂的查询,在使用L2E时需要一些时间来执行。例如,对于我对Sql Server Profiler进行基准测试的一个查询报告大约300毫秒的执行时间,但实际上这个查询在我的PC上大约4.5秒后完成(Xeon四核2.6 GHz带有8GB的RAM。这意味着我的PC正在等待数据到达大约0.5s,并花费大约4s来编译和执行查询,最后读取我的PC上的数据(这只是4条记录)。这是很多时间,特别是因为ToListAsyns()不会将控制返回到UI直到实际查询被发送到数据库,这意味着我的应用程序全部4秒钟挂起"。解决此问题的一种方法是使用Task.Run()而不是ToListAsync,但这只会允许我应用程序显示一些等待标志,仍然会有4s延迟。

在一些较旧的PC上,这可能意味着用户将等待10秒进行查询编译,这不是理想的事情。所以,任何人都知道如何预编译我的所有查询,以便即使第一次执行它们也没有延迟?

1 个答案:

答案 0 :(得分:0)

我相信您正在寻找的概念是“预生成的地图视图” - https://msdn.microsoft.com/en-us/data/dn469601.aspx

在搜索该功能时,我也发现了这篇相当近期的相关文章 - http://www.fusonic.net/en/blog/2014/07/09/three-steps-for-fast-entityframework-6.1-first-query-performance/

请注意,在EF 5中添加了支持以自动编译LINE-to-Entities查询,因此每次都不再进行编译 - https://msdn.microsoft.com/en-us/data/hh949853.aspx#4