解决winform使用EF6 第一次查询会慢个几秒钟


参考:

https://www.cnblogs.com/dudu/p/entity-framework-warm-up.html

https://docs.microsoft.com/zh-cn/ef/ef6/fundamentals/performance/pre-generated-views?redirectedfrom=MSDN#code

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

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

using (var dbcontext = new CnblogsDbContext())
{
    //...
}

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

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

代码如下(Entity Framework的版本至少是6.0才支持):

using (var dbcontext = new CnblogsDbContext())
{
    var objectContext = ((IObjectContextAdapter)dbcontext).ObjectContext;
    var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace);
    mappingCollection.GenerateViews(new List<EdmSchemaError>());
}
//对程序中定义的所有DbContext逐一进行这个操作

 

对于ASP.NET应用程序 ,可以将上面的代码放在Application_Start或者PreApplicationStartMethod中执行。

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
上一篇:winform自定义控件(UserControl)加载慢的研究
下一篇:devexpress图表Chart开发日志
评论列表

发表评论

评论内容
昵称:
关联文章

解决winform使用EF6 第一查询
IIS初始化(预加载),解决第一访问,程序池被回收问题
从一解决Nancy参数绑定“bug”开始发布自己的第一nuget包(上篇)
从一解决Nancy参数绑定“bug”开始发布自己的第一nuget包(下篇)
EFCore分组查询Group使用
使用.NET 6开发TodoList应用(14)——实现查询过滤
EF异步查询ToListAsync报错
记一数据库查询优化记录
.NET IIS第一访问,程序池被回收问题,IIS初始化(启用预加载)
化繁为简,用例子介绍JavaScript异步处理async awite
winform自定义控件(UserControl)加载的研究
使用.NET 6开发TodoList应用(13)——实现查询分页
使用.NET 6开发TodoList应用(22)——实现缓存
Winform开发的快速、健壮、解耦的点建议
使用Hot Chocolate和.NET 6构建GraphQL应用(4) —— 实现Query映射功能
FastReport 合并多报表,一打印多rpt文件
winform MDI子窗口打开闪动问题
EF并发处理,防止并发修改数据
使用.NET 6开发TodoList应用(16)——实现查询排序
使用.NET 6开发TodoList应用(15)——实现查询搜索

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码