一尘不染

实体框架在每次编译后第一次加载非常慢

c#

顾名思义,我在使用实体框架针对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

阅读 211

收藏
2020-05-19

共1个答案

一尘不染

在第一个查询中,EF编译模型。对于这么大的模型,这可能需要花费大量时间。

这里有3条建议:http :
//www.fusonic.net/zh/blog/2014/07/09/three-steps-for-fast-
entityframework-6.1-first-query-
performance/

总结:

  1. 使用缓存的数据库模型存储
  2. 生成预编译的视图
  3. 使用n-gen生成entityframework的预编译版本,以避免出现拼音

我还要确保在进行基准测试时以发布模式编译应用程序。

另一个解决方案是查看拆分DBContext。400个实体很多,使用较小的块应该更好。我没有尝试过,但我认为可以一一构建模型,这意味着一次加载不会花费15秒。请参阅Julie
Lerman的这篇文章https://msdn.microsoft.com/en-
us/magazine/jj883952.aspx

2020-05-19