【发布时间】:2017-11-16 16:23:00
【问题描述】:
当我将文件上传到 Azure Blob 时,内存消耗似乎很高。下面的数据来自一个 200 MB 的文件上传。
public async Task<IActionResult> PostFile(IFormFile file)
{
var filePath = Path.GetTempFileName();
using (var stream = new FileStream(filePath, FileMode.Create))
{
-> Memory used: 108 MB
await file.CopyToAsync(stream);
-> Memory used: 308 MB
await blockBlob.UploadFromStreamAsync(stream);
-> Memory used: 988 MB
}
}
由于文件已经加载到流中,我无法理解 UploadFromStreamAsync() 导致的内存消耗急剧增加。我正在使用 Microsoft.WindowsAzure.Storage 8.1.4 和 .NET Core 1.1。
我做错了什么还是这是预期的行为?
【问题讨论】:
-
为什么不直接调用
await blockBlob.UploadFromStreamAsync(file.OpenReadStream())而不是先写入文件呢?假设您使用 Windows(不知道关于 Linux),已知事实是它会先尝试将文件读入内存,同时仍将其写入磁盘 -
感谢您的建议。它可以工作,但内存消耗是相同的,只是它现在在单次调用中从 108 MB 变为 988 MB。
-
根据你的描述,我已经在我的电脑上创建了一个测试demo。我的 .net 核心版本是 1.1,存储 SDK 版本是 8.1.4。我将 224.5 视频上传到 blob 存储。它只需要 243 内存使用量。我无法重现您的问题。您能否创建一个测试演示并给我一个 github 链接来重现您的问题?这是我的代码链接:imgur.com/a/0E5zm 这是内存使用链接:imgur.com/siu5q32
-
我在这里创建了一个存储库:github.com/andreasnauta/test-asp-core-memory。我们在两台不同的计算机上进行了尝试,并且得到了 readme.md 文件中提到的相同内存消耗。 Visual Studio 设置为发布模式,但由于内存消耗较低,可能还有其他问题。
-
我目前正在调试同样的问题,当使用 UploadFromStreamAsync 时,我的内存使用量增加了 5 倍。所有 .Net Core 1.1 都是 MVC 对吗? @andreasnauta您是否能够缓解或有任何经验教训可以分享?
标签: c# azure asp.net-core azure-storage azure-blob-storage