【发布时间】:2022-01-25 15:09:23
【问题描述】:
我在一个中型 .NET Web API 应用程序上工作。我们最近将它从 .NET Framework 4.6 迁移到 .NET 5。现在所有返回大小超过 500 KB 数据的端点都非常慢。在 Debug 和 Release 模式下本地启动时它工作正常,但在实际服务器上启动时会变慢。我们有一个端点,它过去在大约 20-40 秒内传输 40MB 以上的数据,现在需要 5-6 分钟才能传输相同数量的数据。 Chrome 开发工具建议延迟是因为内容下载时间。我尝试将较慢的端点转换为使用 async-await,返回 IAsyncEnumerable 但没有运气。
由于严格的组织政策,我无法在此处粘贴代码。我们有一个正常运行的异常处理程序中间件、证书验证中间件和一个自定义授权属性。我们在 StartUp.cs 中启用了 JSON 序列化程序、响应压缩和 swagger。我们正在为我们的部署使用自包含策略。此外,端点不会对数据执行任何繁重的操作。他们只是查询数据库并将其返回给客户端。很明显,DB 操作没有延迟,因为端点流式传输 40MB+ 数据从内存缓存中流式传输。
我知道不看代码就很难提供建议。但是,如果有人过去遇到过类似的问题并使用某种方式解决了它,我将不胜感激。
【问题讨论】:
-
1.通过检查查询探查器确保实际上与 db 无关。 2.然后在您怀疑有延迟的每个部分之前和之后设置日志。 3.本地化后,如果在查询上,检查EF到底在运行什么。如果它不在查询中,请告诉我它在哪里。
-
谢谢,Indrit。我写的 40MB+ 端点从服务启动时生成的内存缓存返回数据(通过查询外部服务)。所以看起来响应传输有问题。但我仍然会检查查询探查器以对其他端点进行故障排除。
标签: c# asp.net-core-webapi .net-5