C#,XNA,FileStream,内存不足异常

Mat*_*Mat 2 c# out-of-memory xna-4.0

我正在尝试将我的XNA游戏的每个渲染帧保存到硬盘.所以在每一帧中,我都称这个代码:

        protected override void LoadContent()
        {
            ....
            colorRT = new RenderTarget2D(GraphicsDevice, backbufferWidth, backbufferHeight, false, SurfaceFormat.Color, DepthFormat.Depth24);
            lightRT = new RenderTarget2D(GraphicsDevice, backbufferWidth, backbufferHeight, false, SurfaceFormat.Color, DepthFormat.None);
            specRT = new RenderTarget2D(GraphicsDevice, backbufferWidth, backbufferHeight, false, SurfaceFormat.Color, DepthFormat.None);

            ....
         }


        using (Stream stream = File.OpenWrite("color_"+frameNumber+".png"))
        {
            colorRT.SaveAsPng(stream, colorRT.Width, colorRT.Height);
            stream.Flush();
            stream.Close();
            stream.Dispose();
        }
        using (Stream stream = File.OpenWrite("light_" + frameNumber + ".png"))
        {
            lightRT.SaveAsPng(stream, lightRT.Width, lightRT.Height);
            stream.Flush();
            stream.Close();
            stream.Dispose();
        }
        using (Stream stream = File.OpenWrite("spec_" + frameNumber + ".png"))
        {
            specRT.SaveAsPng(stream, specRT.Width, specRT.Height);
            stream.Flush();
            stream.Close();
            stream.Dispose();
        }
        System.GC.Collect();
        frameNumber++;
Run Code Online (Sandbox Code Playgroud)

但是如果这个代码打开了,内存消耗会上升和上升,大约半分钟后我会得到一个outOfMemory异常.我添加了flush,close,dispose和GC调用以尝试解决问题,但它并没有改变一件事.

谁知道我做错了什么?

Geo*_*ett 5

根据这个 Texture2D.SaveAsJpeg(以及Texture2D.SaveAsPng)有内存泄漏.

(不幸的是)解决方案是创建自己的纹理保存例程.