【问题标题】:ASP.NET Core memory consumption while uploading a file to Azure Blob将文件上传到 Azure Blob 时的 ASP.NET Core 内存消耗
【发布时间】: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


【解决方案1】:

我的测试应用是MVC应用,所以只占用了243内存。

Web api 应用程序与 MVC 应用程序内存使用不同。

我的 web api 应用程序使用量为 1G,如下图所示:

我做错了什么还是这是预期的行为?

这是预期的行为。

我建议你可以使用快照来查看堆大小变化信息。

你可以看到堆大小是释放,但内存使用量仍然是 1G。

【讨论】:

    猜你喜欢
    • 2018-05-09
    • 2021-12-18
    • 2017-01-24
    • 2017-08-19
    • 2019-03-04
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多