2017-06-14 141 views
4

當我將文件上載到Azure Blob時,內存消耗似乎相當高。以下數據來自200 MB文件上傳。將文件上傳到Azure Blob時的ASP.NET Core內存消耗

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。

我做錯了什麼或者是這種預期的行爲?

+0

爲什麼不直接調用'等待blockBlob.UploadFromStreamAsync(file.OpenReadStream())',而不是它第一次寫入文件?假設你使用Windows(對Linux不知道),已知它試圖在將文件寫入磁盤時首先將文件讀入內存 – Tseng

+0

謝謝你的建議。它可以工作,但內存消耗是相同的,只不過它在單次調用中從108 MB到988 MB不等。 – andreasnauta

+0

根據你的描述,我在我的電腦上創建了一個測試演示。我的.net核心版本是1.1,存儲SDK版本是8.1.4。我上傳一個224.5視頻到blob存儲。它只需要243個內存使用量。我無法重述你的問題。你能否創建一個測試演示並給我一個github鏈接來重現你的問題?這是我的代碼鏈接:http://imgur.com/a/0E5zm,這是內存使用鏈接:http://imgur.com/siu5q32 –

回答

0

我的測試應用程序是MVC應用程序,所以它只需要使用243個內存。

Web api應用程序與MVC應用程序內存使用情況不同。

我的Web API應用程序使用的是1G,如下圖所示:

enter image description here

難道我做錯了什麼,或者這是預期的行爲?

這是預期的行爲。

我建議你可以使用拍攝快照來查看堆大小更改信息。

您可以看到堆大小已釋放,但內存使用量仍爲1G。

enter image description here