EF6查询预编译



有没有一种方法可以预编译EF查询,这样应用程序就不需要编译它(即使是第一次执行)?

我有很多复杂的查询,当使用L2E时需要一些时间来执行。例如,对于我以Sql Server探查器为基准的一个查询,它报告了大约300ms的执行时间,但实际上这个查询在我的电脑上大约4.5s后完成(Xeon Quad Core 2.6 GHz,8GB RAM)。这意味着我的电脑等待数据到达大约0.5s,并花费大约4s编译和执行查询,最后读取我电脑上的数据(仅4条记录)。这需要花费大量时间,尤其是ToListAsyns()在实际查询发送到数据库之前不会将控制权返回到UI,因此这意味着我的应用程序在4秒内全部"挂起"。解决此问题的一种方法是使用Task。Run()而不是ToListAsync,但这只会让我的应用程序显示一些等待信号,仍然会有4s的延迟。

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

我相信您正在寻找的概念是"预生成映射视图"——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

最新更新