C# 通过WebAPI下载Azure Blob时内存使用率高

C# 通过WebAPI下载Azure Blob时内存使用率高,c#,asp.net-web-api,C#,Asp.net Web Api,我使用的是来自的DownloadToStreamEncrypted扩展名,它适用于小文件。我注意到它将整个流加载到内存中。 我正在使用ASP.NETWebAPI。这是我的密码: var stream = new MemoryStream(); await blob.DownloadToStreamEncryptedAsync(provider, stream); stream.Seek(0, SeekOrigin.Begin); response.StatusCode = HttpStat

我使用的是来自的DownloadToStreamEncrypted扩展名,它适用于小文件。我注意到它将整个流加载到内存中。 我正在使用ASP.NETWebAPI。这是我的密码:

var stream = new MemoryStream();

await blob.DownloadToStreamEncryptedAsync(provider, stream);

stream.Seek(0, SeekOrigin.Begin);

response.StatusCode = HttpStatusCode.OK;

response.Content = new StreamContent(stream);

response.Content.Headers.ContentLength = docLength;
response.Content.Headers.ContentType = new MediaTypeHeaderValue(doc.MimeType);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
    FileName = "somefilename",
    Size = docLength
};
return response;
这是可行的,但是不管文件有多大,所使用的内存都会增加。实际上,它并没有将文件流回。是不是我在流中做了什么错误导致了内存的高使用率?理想情况下,它只是从服务器返回,而不首先将其全部加载到内存中。我怀疑问题出在DownloadToStreamEncrypted中的CopyToAsync方法,但我不确定

DownloadToStreamEncrypted的代码为

using (Stream blobStream = await blob.OpenReadAsync(accessCondition, options, operationContext))
            using (Stream decryptedStream = provider.DecryptedStream(blobStream))
            {
                await decryptedStream.CopyToAsync(stream);
            }

我可以做些什么来降低内存使用率吗?

在您的代码中,变量“stream”在使用后不会被释放,是吗?不,WebAPI通过StreamContentTry为我这样做。尝试此工具:。我可以尝试,但问题是整个流在下载之前都会被读取到内存中。这不是内存泄漏——只是我没有正确处理流。如果我只是使用stream blobStream=await blob.OpenReadAsync(accessCondition,options,operationContext),然后将该流传递给StreamContent,文件将以低内存使用率下载。我不能这样做,因为我需要在您的代码中解密,变量“stream”在使用后不会被释放,是吗?不,WebAPI通过StreamContentTry为我这样做。尝试此工具:。我可以尝试,但问题是整个流在下载之前都会被读取到内存中。这不是内存泄漏——只是我没有正确处理流。如果我只是使用stream blobStream=await blob.OpenReadAsync(accessCondition,options,operationContext),然后将该流传递给StreamContent,文件将以低内存使用率下载。我不能那样做,因为我需要解密