有没有办法预编译EF查询,这样应用程序就不需要编译它(即使是第一次执行)?
我有很多复杂的查询,当使用L2E时,需要一些时间来执行。例如,对于我以Sql Server profiler为基准进行基准测试的一个查询,报告的执行时间约为300ms,但实际上在我的PC (至强四核2.6 GHz,内存为8 GHz)上完成此查询的时间约为4.5秒。这意味着我的PC正在等待大约0.5秒的数据到达,并花费大约4秒来编译和执行查询,最后读取我的PC上的数据(仅为4条记录)。这需要很多时间,特别是因为ToListAsyns()在实际的查询被发送到数据库之前不会将控制权返回给UI,所以这意味着我的应用程序全部4秒都“挂起”。解决这个问题的一种方法是使用Task.Run()而不是ToListAsync,但这只会允许我的应用程序显示一些等待信号,仍然会有4s的延迟。
在一些较老的PC上,这可能意味着用户将等待10秒来进行查询编译,这并不是我们所希望的。所以,任何人都知道我如何预编译我所有的查询,以便即使是第一次执行它们也不会延迟?
发布于 2015-04-25 04:04:20
我相信你正在寻找的概念是‘预生成的映射视图’-- 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中添加了对自动编译行到实体查询的支持,因此不再每次都进行编译- https://msdn.microsoft.com/en-us/data/hh949853.aspx#4
https://stackoverflow.com/questions/29849021
复制相似问题