Stream 当我使用流时,UWP应用程序使用了太多内存

Stream 当我使用流时,UWP应用程序使用了太多内存,stream,uwp,out-of-memory,Stream,Uwp,Out Of Memory,我创建了一个应用程序来读取ZipArchive(100多张照片),并使用Stream、MemoryStream、IRandomaccesstream和BinaryReader来设置位图图像的源 private byte[]GetBytes(ZipArchiveEntry实体) { Stream=entity.Open(); MemoryStream ms=新的MemoryStream(); BinaryReader=null; 字节[]imageData=null; 尝试 { stream.Co

我创建了一个应用程序来读取ZipArchive(100多张照片),并使用Stream、MemoryStream、IRandomaccesstream和BinaryReader来设置位图图像的源

private byte[]GetBytes(ZipArchiveEntry实体)
{
Stream=entity.Open();
MemoryStream ms=新的MemoryStream();
BinaryReader=null;
字节[]imageData=null;
尝试
{
stream.CopyTo(ms);
imageData=新字节[ms.Length];
字符串fileclass=“”;
读取器=新的二进制读取器(ms);
Seek女士(0,0);
imageData=reader.ReadBytes((int)ms.Length);
//验证png jpg bmp
一些代码并返回imageData
//抛出异常,返回null
其他的
{
抛出新异常();
}
}
捕获(例外情况除外)
{
返回null;
}
//处置
}
BitmapImage.SetSource按字节[]
公共异步任务GetImageFromZipArchiveEntry(ZipArchiveEntry实体,int索引)
{
MangaPageEntity mpe=新MangaPageEntity();
mpe.指数=指数;
irandomaccesstream iras=null;
尝试
{
字节[]数据=GetBytes(实体);
iras=data.AsBuffer().AsStream().AsRandomAccessStream();
iras.Seek(0);
等待mpe.Picture.SetSourceAsync(iras);
}//捕获并处理
返回mpe;

这样,在手机上运行时会占用太多内存。

尝试将您的流和其他IDisposable放入:

private byte[]GetBytes(ZipArchiveEntry实体)
{
使用(Stream=entity.Open())
使用(MemoryStream ms=new MemoryStream())
{
字节[]imageData=null;
尝试
{
stream.CopyTo(ms);
imageData=新字节[ms.Length];
字符串fileclass=“”;
使用(二进制读取器=新二进制读取器(ms))
{
Seek女士(0,0);
imageData=reader.ReadBytes((int)ms.Length);
}              
//验证png jpg bmp一些代码并返回imageData
//抛出异常,返回null
其他的
{
抛出新异常();
}
}
捕获(例外情况除外)
{
返回null;
}
}
//处置
}
公共异步任务GetImageFromZipArchiveEntry(ZipArchiveEntry实体,int索引)
{
MangaPageEntity mpe=新MangaPageEntity();
mpe.指数=指数;
尝试
{
字节[]数据=GetBytes(实体);
使用(irandomaccesstream iras=data.AsBuffer().AsStream().AsRandomAccessStream())
{
iras.Seek(0);
等待mpe.Picture.SetSourceAsync(iras);
}
}//捕获并处理
返回mpe;
}

当您的代码离开时,它会调用Dispose()。还有一些要读:,可能还有一些。

一条注释,上面写着“Dispose”实际上没有处理任何东西。BinaryReader在finally代码块中处理。它似乎很有效。除了BinaryReader之外,还有很多东西需要处理。好的,我会尝试一下。但是我不知道“使用”和try{}catch{}之间的区别 finally@MarvelTitle然后你需要这样做。一般来说,try/catch/finally与内存和IDisposable无关。我认为主要问题是ZipArchive文件太大。谢谢。也许我可以让它慢慢加载,但我现在真的不知道怎么做uwp@MarvelTitlehowev说,一般来说,可能还有很多其他因素会导致内存问题呃,留下未经处理的溪流肯定是其中之一。