为什么Entity Framework的初始化速度慢如蜗牛呢?

对于在应用程序中定义的每个DbContext类型,在首次使用时,Entity Framework都会根据数据库中的信息在内存生成一个映射视图(mapping views),而这个操作非常耗时。

在第1次调用DbContext进行数据库操作时会进行缓慢的mapping views生成操作,后续的DbContext操作会共享已经生成的mapping views,不受这个问题影响。但是要注意的是你定义的每一个DbContext都会面临这个问题。

而我们的缓解之道则是在应用程序初始化时一次性触发所有的DbContext进行mapping views的生成操作——调用StorageMappingItemCollection的GenerateViews()方法。

 一、预生成映射视图

将代码放在Application_Start中调用PreApplicationStartMethod中执行

EF优化之启动预热
 private void PreApplicationStartMethod()
        {
            using (var dbcontext = new XXXDBContext())
            {
                var objectContext = ((IObjectContextAdapter)dbcontext).ObjectContext;
                var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace); mappingCollection.GenerateViews(new List<EdmSchemaError>());
            }  //对程序中定义的所有DbContext逐一进行这个操作
        }
EF优化之启动预热

在程序更新时只需发一个请求让程序启动起来,比如访问首页,就可以直接发布。而第1位用户,等待时间由原来7秒减少到0.5-0.6秒。

相关文章:

  • 2022-12-23
  • 2021-10-18
  • 2022-12-23
  • 2022-12-23
  • 2021-10-31
  • 2021-08-15
  • 2021-09-30
  • 2022-12-23
猜你喜欢
  • 2021-09-24
  • 2022-01-18
  • 2021-07-21
  • 2021-09-28
  • 2021-09-17
相关资源
相似解决方案