我使用XNA游戏项目来创建3D场景的帧。但是在使用MemoryStream时我遇到了内存泄漏。下面的代码被称为Draw函数的一部分。
byte[] FrameSave()
{
int w = GraphicsDevice.PresentationParameters.BackBufferWidth;
int h = GraphicsDevice.PresentationParameters.BackBufferHeight;
//pull the picture from the buffer
int[] backBuffer = new int[w * h];
GraphicsDevice.GetBackBufferData(backBuffer);
//copy into a texture
Texture2D texture = new Texture2D(GraphicsDevice, w, h, false, GraphicsDevice.PresentationParameters.BackBufferFormat);
texture.SetData(backBuffer);
MemoryStream ms = new MemoryStream();
texture.SaveAsJpeg(ms, w, h); //MEMORYLEAK
byte[] zframe = ms.ToArray();
ms.Close();
ms.Dispose();
texture.Dispose();
return zframe;
}
任何帮助将不胜感激。
答案 0 :(得分:0)
啊我在其他帖子中找到了回复:
根据这个Texture2D.SaveAsJpeg(以及Texture2D.SaveAsPng)有一个内存泄漏。 (不幸的是)解决方案是创建自己的纹理保存例程。
谢谢XNA。 >>