当我在我的 XNA 游戏中制作屏幕截图时,每张都会texture.SaveAsPng
消耗一些内存,并且似乎不会回到游戏中。所以最终我的内存不足。我尝试将纹理数据保存到FileStream
andMemoryStream
中,希望可以从那里保存为Bitmap
,但结果是一样的。有没有办法强制释放此内存或一些解决方法,让我获取图像数据并以其他方式保存它而不会遇到内存不足异常?
sw = GraphicsDevice.Viewport.Width;
sh = GraphicsDevice.Viewport.Height;
int[] backBuffer = new int[sw * sh];
GraphicsDevice.GetBackBufferData(backBuffer);
using(Texture2D texture = new Texture2D(GraphicsDevice, sw, sh, false,
GraphicsDevice.PresentationParameters.BackBufferFormat))
{
texture.SetData(backBuffer);
using(var fs = new FileStream("screenshot.png", FileMode.Create))
texture.SaveAsPng(fs, sw, sh); // ← this line causes memory leak
}