2014-06-17 91 views
3

我正在创建Windows Phone 8应用程序,我有一个带有512 MB RAM的Windows Phone 8,当我在模拟器上运行应用程序时,它运行得非常好,但是当我检查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碎片(大对象堆)是已知的问题。

像这样加载文件是非常低效的。

第一:

new MemoryStream() 

即阵列的重分配的吨。预先将其初始化为数组的大小。

不过还好:

移动在512KB块中的数据,这样你就不会大量内存。无需一次将所有内容加载到内存中。

+0

谢谢你,但你能通过代码告诉我,我不知道,谢谢你的快速回复! –

+0

幽灵,你能引导我的代码,兄弟! –

+0

是的,我可以,但我通常不提供“准备好,我为你做了你的工作”的解决方案。一旦他们得到提示问题出在什么地方,我便可以利用他们的大脑来处理文档。 – TomTom