顾名思义,我在使用实体框架针对SQL Server数据库的第一次查询时遇到问题。我试图寻找答案,但似乎没有人对此有实际解决方案。
测试是在Visual Studio 2012中使用Entity Framework 6完成的,我还使用了T4视图模板来预编译视图。该数据库位于SQL Server 2008上。我们大约有400个POCO(400个映射文件),数据库表中只有100行数据。
捕获后是我的测试代码和结果。
static void Main(string[] args){ Stopwatch st=new Stopwatch(); st.Start(); new TestDbContext().Set<Table1>.FirstOrDefault(); st.stop(); Console.WriteLine("First Time "+st.ElapsedMilliseconds+ " milliseconds"); st.Reset(); st.Start(); new TestDbContext().Set<Table1>.FirstOrDefault(); st.stop(); Console.WriteLine("Second Time "+st.ElapsedMilliseconds+ " milliseconds"); }
试验结果
First Time 15480 milliseconds Second Time 10 milliseconds
在第一个查询中,EF编译模型。对于这么大的模型,这可能需要花费大量时间。
这里有3条建议:http : //www.fusonic.net/zh/blog/2014/07/09/three-steps-for-fast- entityframework-6.1-first-query- performance/
总结:
我还要确保在进行基准测试时以发布模式编译应用程序。
另一个解决方案是查看拆分DBContext。400个实体很多,使用较小的块应该更好。我没有尝试过,但我认为可以一一构建模型,这意味着一次加载不会花费15秒。请参阅Julie Lerman的这篇文章https://msdn.microsoft.com/en- us/magazine/jj883952.aspx