2014-06-17 4 views
3

Windows Phone 8 응용 프로그램을 만들고 있는데 Windows Phone 8에 512MB RAM이 있습니다. 에뮬레이터에서 응용 프로그램을 실행하면 매우 잘 실행되지만 Windows를 검사하면 전화 8 장치, 예외가 발생했습니다.Windows Phone 8의 System.OutOfMemoryException

System.OutOfMemoryException 

아직 사용 가능한 메모리가 많은 경우 아래 코드를 참조하십시오 :

private IsolatedStorageFileStream isoVideoFile; 
string isoVideoFileName = "Movie.mp4"; 

using (isoVideoFile = new IsolatedStorageFileStream(isoVideoFileName, 
FileMode.OpenOrCreate, FileAccess.ReadWrite, 
IsolatedStorageFile.GetUserStoreForApplication())) 
{ 
    using (MemoryStream stream = new MemoryStream()) 
    { 
    isoVideoFile.Write(stream.GetBuffer(), 0, (int)stream.Position); 
    } 
    byte[] binaryData = new Byte[isoVideoFile.Length]; 

    long bytesRead = isoVideoFile.Read(binaryData, 0, (int)isoVideoFile.Length); 
    string videofile = Convert.ToBase64String(binaryData, 0, binaryData.Length);        
} 
+1

정말로 모든 파일 내용을 메모리에 저장 하시겠습니까? 청크로 파일 청크를 변환 할 수 없습니까? –

+0

예. VIDEO 파일은 비디오 파일을 사용합니다. 얼마나 큽니까? 나는 이런 식으로 읽지 말 것을 강력히 제안 할 것이다. 더 작은 버퍼 (512kb)를 사용하고 청크로 청크를 옮긴다. – TomTom

+0

장치에 x MB가 있다는 사실은 실제로 x MB를 할당 할 수 있음을 의미하지 않습니다. 메모리 조각화라고하는 것이 있습니다. 또한 앱당 한도가있을 수 있습니다. – dandan78

답변

0

"메모리가 없다"고 가정합니다. 정말로 "하나의 조각 안에 충분한 기억이 아니다". LOH 단편화 (Large Object Heap)는 알려진 문제점입니다.

파일을로드하는 것은 비효율적입니다.

첫째 어레이의 재 할당의 톤

new MemoryStream() 

. 미리 배열 크기로 초기화하십시오.

그러나 더 나은 : 5백12킬로바이트 덩어리에서

이동 데이터, 당신은 메모리 돼지되지 않도록. 한 번에 모든 것을 메모리에로드 할 필요가 없습니다.

+0

당신에게 사람을 고맙다. 그러나 당신은 코드에 의해 나에게 보여줄 수있다, 나 do not는 ur 빠른 답장을 감사한다! –

+0

rhughes, 당신은 코드, 형제에 의해 나를 안내 할 수 있습니까! –

+0

예, 할 수는 있지만 일반적으로 "준비가되어 있습니다. 나는 당신을 위해 일해 왔습니다"해결책을 원칙적으로 제공하지 않습니다. 문제가 무엇인지 힌트를 얻으면 일단 사람들이 두뇌를 사용하여 문서 작업을해야합니다. – TomTom