2014-06-07 138 views
1

這發生在我的Azure存儲模擬器上(尚未在真正的Azure存儲上嘗試)。我正在將文件保存到Blob存儲。我對小文件沒有任何問題(例如< = 107 MB)。但是,對於較大的文件(例如> = 114 MB),我可以無誤地上傳文件,但在嘗試下載文件時出現內存不足異常。Azure Blob存儲:CloudBlockBlob.DownloadToStream拋出OutOfMemory異常

public Stream GetStream(string fileName) 
    { 
     var blob = GetCloudBlobContainer().GetBlockBlobReference(fileName); 
     if (blob.Exists()) 
     { 
      Stream stream = new MemoryStream(); 
      blob.DownloadToStream(stream); 
      return stream; 
     } 
     return null; 
    } 

在調用blob.DownloadToStream(stream)時引發異常。

如何解決這個問題?

更新: 好的,我找到了解決辦法。我可以直接使用blob.DownloadToFile()直接保存到本地文件(我仍然需要它),而不是返回流。不過,我仍然對找到解決這個問題的方法感興趣。

回答

2

MemoryStream將所有數據存儲在內存中。而DownloadToFile爲您工作的事實意味着您的機器在嘗試將Blob存儲在內存時可能會耗盡內存。 對於上傳,如果您直接從文件系統上的文件上傳到blob,我們不會將整個文件加載到內存中,因此您不會在下載時遇到同樣的問題。

+1

我接受了這個答案。但是,我不相信我的機器只有114 MB的文件內存不足。 – newman

0

除了上面的Vinay的回答,我會建議您在Windows任務管理器上交替打開「性能」&「進程」選項卡,以監視下載時的內存使用情況。