【发布时间】:2019-02-24 16:43:49
【问题描述】:
我正在处理 Entity Framework Core DbContext 预热时间。我有非常大的 DbContext,我正在使用 AddDbContextPool() 选项注册 DbContexes,该选项将 DbContext 注册为单例,应用程序会重用它。
在早期版本的 EF 中,为了加快应用程序启动时间,应用了以下解决方法:使用缓存 DbModelStore、生成预编译视图和/或使用 NGen 生成实体框架的预编译版本以避免抖动。
但是,我没有看到在 Entity Framework Core 上应用这些的任何有效方法。我什至找不到任何其他方法来避免 DbContext 的初始启动/蠕虫时间。
我们的应用程序的蠕虫启动时间约为 30 多秒。
我尝试在我的应用程序首次启动时初始化 DbContextes,但这似乎是一个优雅或事件负担得起的解决方案。
在 Entity Framework Core 团队 (Github) 上有一个编译视图的功能请求,但是,此功能没有截止日期。
我需要知道是否有任何我可以应用的解决方法和/或解决方案。
谢谢
【问题讨论】:
-
“预热时间”,搞笑的错误!关于主题:为什么您关心预热时间,这应该只在服务器启动后才发生,对吗?当然这不是很好,但是一旦你起来了,性能好吗?
-
如果我使用 AddDbContext,我会多次遇到蠕虫病毒。但是如果我使用 AddDbContextPool 服务注册是单例的,所以服务运行良好。这发生在第一个请求上,我正在处理高交易项目。因此,第一笔交易需要 30 秒。这是不可接受的。
-
看来你没有使用正确的工具来解决你的问题......也许你应该考虑使用像 Dapper 这样的工具。 EF 并不以其出色的速度和性能而闻名。不幸的是,我没有足够的经验来解决这些问题,无法更具体地帮助您。
-
确定这与您的网络服务器配置无关?使用 IIS 时,您可以在应用程序池设置下将“空闲时间”设置为“0”——不同的 Web 服务器可能有类似的设置。
-
我将看看我的 Web 服务器配置。将 Idle Timeout 更改为 0 肯定会有所帮助。让我们看看
标签: c# asp.net-core .net-core ef-core-2.0