Mar*_*rus -1 c# asp.net-core ef-core-2.1
我有一个非常简单的获取,它从字面上抓取整个数据库集并通过线路返回它.有问题的集合目前约为28,000行.
在本地测试时,对数据库的调用在不到一秒的时间内完成,但是大摇大摆的调用大约需要一分钟.在我们的生产环境中,完成调用大约需要1-2分钟(我们没有准确的数据库调用的时间码,但我们在前端计时需要多长时间,而且它也是1-2分钟).
数据调用和它到达前端之间的某些东西需要很长时间,而且我不确定如何解决它.
代码字面意思是:
[HttpGet]
public IActionResult GetAllCustomers()
{
return Ok(_context.Customers);
}
Run Code Online (Sandbox Code Playgroud)
我还能做些什么来调试这个?
我们的工作解决方案将是显着限制数据集,而不是返回<1000条记录,但业务首选项是拥有所有内容并让前端表对其进行排序和过滤.
在云雀上,我从模型中删除了所有相关对象,并将其剥离到表格中的10个左右列,但仍然需要很长时间.
您的问题与ASP.NET或微服务架构无关......
如果数据库表中有28,000条记录并通过HTTP请求所有记录,那么它将会很慢.
请求快速localhost的部分原因是所有28,000条记录都被发送到localhost,而不是像生产中那样"通过网络"发送.在制作中,所有28,000条记录必须通过互联网传播.请求可能是快速localhost的另一个原因是您的数据库也在运行localhost,所以再次,数据不必"通过网络"传输.在生产中,即使数据库是内部的,数据也可能有一段距离从数据库传输到API,也可以"通过线路",如果数据库也在运行localhost,则不会发生这种情况.
您提到了这一要求:"但业务偏好是拥有所有内容,并让前端表对其进行排序和过滤."
您可能一开始并未意识到这一点,但这是Web应用程序最常见的问题之一,它总是通过分页或垂直滚动延迟加载网页和Web控件来解决.下载所有数据,以便前端可以进行分页,排序和过滤,这不是解决问题的正确方法.