启动/第一次查询非常缓慢

4

需要一段时间(3分钟以上)来“创建/编译”我的DbContext。Web服务器大约在5秒钟内启动,但是当我对数据库进行第一个查询时,EF 2.0必须在内存中“构建/创建/编译”数据库,或者类似的操作,我想是这样的吧?下一个请求几乎是瞬间完成的。这是通过Database First创建的DbContext,数据库已经存在于MSSQL中,并且有数据。DbContext包含大约500个带有关系的DbSet。

有没有办法通过在开发期间先进行Entity Framework的DbContext的“创建(映射?)”,创建它所需的文件/映射,以便第一个请求也很快?


2
懒加载在Entity Framework Core 2.0上尚不存在吗?每次启动应用程序,而不是每个请求。 - Appsum Solutions
如果您使用IIS进行主机托管,请查看以下内容:https://weblogs.asp.net/scottgu/auto-start-asp-net-applications-vs-2010-and-net-4-0-series 或 https://www.codeproject.com/Articles/795265/IIS-Asp-net-warm-up-Auto-Start-Application 否则,您的Web服务器可能支持类似的技术。无论如何,这是由Web服务器启动的。在Web服务器决定之前,您的应用程序不会执行任何操作,因此无法仅通过代码来实现。 - grek40
Web应用程序本身启动大约需要5秒钟,这是可以接受的时间。问题在于EF Core 2.0的第一个查询需要3分钟或更长时间。如果仅显示一个HTML页面,则加载时间约为5秒钟。如果使用ADO.NET,查询将在大约2秒钟后显示。即使是简单的db.Articles.FirstOrDefault(),第一个查询也需要3分钟或更长时间,而随后的查询(任何查询)只需要正常的100毫秒左右。 - Appsum Solutions
是的,那又怎样?你需要在一些启动代码中发出你的第一个(虚拟)查询,而不是等待第一个用户请求。如果你把它放在应用程序启动中,启动将变得不可接受,所以你需要把它放在一个客户端独立的预热代码中。 - grek40
1
由于我正在尝试调试(在开发中),所以我想知道这个“第一个虚拟查询”的时间是否可以更短。因为可能 EF 正在引导自己,我想知道这个引导的结果是否可以被缓存,这样 EF 就不需要在每次运行时重新构建整个引导,而是读取缓存版本。 - Appsum Solutions
据我所知,EF6中提供了缓存功能,但在EF Core中被删除,因为它会产生太多的开发负担。 - grek40
1个回答

0

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