2014-06-07 2 views
1

내 Azure 저장소 에뮬레이터에서 발생합니다 (아직 실제 Azure 저장소에서 시도하지 않았습니다). Blob 저장소에 파일을 저장하고 있습니다. 더 작은 파일에는 아무런 문제가 없습니다 (예 : < = 107MB). 그러나 더 큰 파일 (예 : 114MB 이상)의 경우 오류없이 파일을 업로드 할 수는 있지만 파일을 다운로드하려고 할 때 메모리 예외가 발생했습니다.하늘색 방울 저장소 : 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로 직접 업로드하는 경우 전체 파일을 메모리에로드하지 않으므로 다운로드시와 같은 문제가 발생하지 않습니다.

+1

이 답변을 수락했습니다. 그러나 내 컴퓨터의 메모리가 114 MB 만있는 파일에 대해서만 실행되고 있다고 생각하지 않습니다. – newman

0

위의 Vinay의 답변 외에도 Windows 작업 관리자의 "성능"& "프로세스"탭을 번갈아 가며 다운로드하는 동안 메모리 사용을 모니터링 할 것을 제안합니다.