0

我使用 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;
    }

任何帮助将不胜感激。

4

1 回答 1

0

啊,我在其他线程中找到了回复:

根据这个Texture2D.SaveAsJpeg(以及Texture2D.SaveAsPng)有内存泄漏。解决方案是(不幸的是)创建自己的纹理保存程序。

谢谢 XNA。>.>

于 2013-05-18T20:47:01.073 回答