【发布时间】:2021-06-08 15:21:05
【问题描述】:
我有一个为客户编写的客户业务应用程序。它是一个客户跟踪应用程序,涉及上传和下载客户相关文件。
文件保存在 SQL Server 中。对于比 meg 小的小文件,它可以正常工作。但是当文件变大时,下载文件的时间会越来越慢,直到抛出异常。有时会下载 25 兆的大容量,但有时会超时。
今天,客户端无法下载 5 meg 文件,因为它在大约 60 秒后超时。
当我将应用程序从我的开发机器运行到同一个数据库时,文件会在大约 10 秒内下载完毕。所以在我看来,问题不在于数据库,而在于 AppService 托管。
当我查看 Azure 上 AppService 的日志时,它显示下载这些文件时 CPU 已达到最大值。
该网站目前采用 S1 计划,价格为 75 美元,下一个计划是每月 150 美元,这对于低使用率的网站来说似乎非常昂贵。只供3-4人使用。除了这些大文件下载之外,速度非常好。
代码相当简单:
var file = await this._attachmentRepository.GetFileAsync(id);
FileContentResult result = new FileContentResult(file.Content, file.ContentType)
{
FileDownloadName = file.FileName
};
return result;
关于如何优化这个有什么建议吗?
【问题讨论】:
-
您是否考虑将文件存储在 blob 存储而不是数据库中(只需将 blob URL 存储在数据库中)?这将是推荐的方法。
-
@GauravMantri,这似乎是个好主意,将对此进行更多研究。
-
请注意,将内容移动到 blob 的另一个好处是您可以提供参考链接并在没有任何中介(例如您的网络应用程序)提供流式传输的情况下进行下载(消除节流点和减少应用服务的负载)。我发布了一个答案here,对此进行了更多讨论(是的,它已经有将近 6 年的历史了,但除了 SDK 代码本身之外,答案仍然有效,因为 SDK 多年来一直在发展)。
标签: c# azure asp.net-core azure-web-app-service