Entity Framework Core首次加载缓慢

5
我正在处理Entity Framework Core DbContext预热时间的问题。我有一个非常庞大的DbContext,并且我正在使用AddDbContextPool()选项注册我们的DbContexes,这将DbContext注册为单例并使应用程序重复使用它。
在之前的EF版本中,为了加快应用程序启动时间,会采取以下方法:使用缓存的DbModelStore、生成预编译视图和/或使用NGen生成Entity Framework的预编译版本以避免jitting。
然而,在Entity Framework Core上,我没有找到任何有效的方式来应用这些方法。我甚至找不到任何其他避免DbContext初始启动/预热时间的方法。
我们应用程序的预热时间约为30秒以上。
我尝试在我的应用程序首次启动时初始化DbContexts,但这似乎不是一种优雅或者经济实惠的解决方案。
Entity Framework Core团队(Github)有一个关于编译视图的功能请求,但是目前还没有这个功能的截止日期。
请问是否有任何绕过和/或解决方案可以应用?
谢谢。

"热身时间",出现了滑稽的错误!说正题:为什么你关心热身时间?这应该只会在服务器启动后发生,对吧?虽然这不太好,但一旦启动,性能就很好了,是吗? - Glubus
如果我使用AddDbContext,我会多次遇到预热时间。但是如果我使用AddDbContextPool,则服务注册将作为单例进行,因此服务可以正常工作。这发生在第一个请求上,而我正在处理高交易项目。因此,第一次交易需要30秒。这是不可接受的。 - Derviş Kayımbaşıoğlu
看起来你并没有使用适合你问题的正确工具...也许你应该考虑使用像Dapper这样的东西。EF并不以其出色的速度和性能而闻名。很遗憾,我对这些问题没有足够的经验来给你更具体的帮助。 - Glubus
1
这与您的Web服务器配置无关吗?使用IIS时,您可以在应用程序池设置下将“空闲时间”设置为“0”-不同的Web服务器可能具有类似的设置。 - nilsK
我会查看我的Web服务器配置。将Idle Timeout更改为0肯定会有所帮助。让我们看看。 - Derviş Kayımbaşıoğlu
2个回答

1

首次启动较慢是因为EF正在配置表映射。最重要的事情是重新设计您的dbcontext。您必须将配置拆分为不同的上下文。一个上下文必须包含几个相关联的实体(如DDD中所做的那样)。例如,UserDbContext(用于授权。提供用户、令牌、个人数据...),CustomerDbContext(提供所有客户数据:客户、联系人、合同、报价...)


0

我在编程时遇到了dbContext预热时间困难,因为我们有一个非常大的dbContext(或者应该说过去有)。为了解决这个问题,现在我们针对应用程序的不同部分有多个dbContexts。这确实是一种非常推荐的方法。

然后使用旧的数据注释[NotMapped]属性关闭你的dbcontexts。DBContext slow when initially building


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接