Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 启动/第一次查询非常慢_C#_Entity Framework_Entity Framework Core - Fatal编程技术网

C# 启动/第一次查询非常慢

C# 启动/第一次查询非常慢,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,“创建/编译”我的DbContext需要一段时间(3分钟以上)。web服务器大约在5秒钟内启动,但当我对数据库进行第一次查询时,我想EF2.0必须在内存中“构建/创建/编译”数据库还是其他什么?接下来的请求几乎是即时的。这是DbContext的第一个数据库创建,数据库已经存在于MSSQL中,并且有数据。DbContext包含大约500个具有关系的数据库集 在运行web服务器(在开发时)之前,是否有办法通过“创建(映射?)”实体框架的DbContext来加快速度,创建它所需的文件/映射,这样第一个

“创建/编译”我的DbContext需要一段时间(3分钟以上)。web服务器大约在5秒钟内启动,但当我对数据库进行第一次查询时,我想EF2.0必须在内存中“构建/创建/编译”数据库还是其他什么?接下来的请求几乎是即时的。这是DbContext的第一个数据库创建,数据库已经存在于MSSQL中,并且有数据。DbContext包含大约500个具有关系的数据库集


在运行web服务器(在开发时)之前,是否有办法通过“创建(映射?)”实体框架的DbContext来加快速度,创建它所需的文件/映射,这样第一个请求也会很快?

一般来说,默认情况下这是实体框架的正常行为,但从原因的另一方面来看,有一些方法可以解决这一问题

例如,您可以尝试:

  • 禁用数据库初始化
  • 使用预生成视图
  • “热”加载
请尝试阅读以下文章:


实体框架核心2.0上尚不存在延迟加载?每次启动应用程序时,而不是每次请求。如果您使用IIS托管,请查看以下内容:否则,您的Web服务器可能支持类似的技术。无论如何,这是Web服务器必须启动的。在web服务器决定之前,你的应用程序不会执行任何操作,因此无法单独用代码来执行。web应用程序本身大约在5秒钟后启动,这是可以接受的。这是通过EF Core 2.0进行的第一次查询,耗时3分钟以上。如果我只是显示一个HTML页面,它将在大约5秒钟后加载。如果使用ADO.NET,查询也会在2秒后显示。第一次查询(甚至是一个简单的db.Articles.FirstOrDefault())需要3分钟以上的时间,后续查询(任何查询)需要正常的100毫秒左右的时间。是的,那又怎样?您需要在一些启动代码中发出第一个(虚拟)查询,而不是等待第一个用户请求。如果您将其放入应用程序启动,启动将变得不可接受,因此您需要将其放入独立于客户端的预热代码中。因为我正在尝试调试(在开发中),我想问的是,是否可以缩短“第一次虚拟查询”的时间。因为EF可能正在引导自己,我想问的是,这个引导的结果是否可以缓存,这样EF就不需要每次运行都重建整个引导,而是读取缓存的版本。