2013-05-18 53 views
0

我使用XNA遊戲項目來創建3D場景的幀。但是,我使用MemoryStream時出現內存泄漏。下面的代碼被稱爲Draw函數的一部分。XNA - 保存幀時發生內存泄露

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

不知道這是否有幫助,但嘗試使用'using'語句作爲'MemoryStream'。 ('使用(MemoryStream ms = new MemoryStream())') – gunr2171

+0

我試過了,但是它和以前一樣。 – ShirouWrath

+0

難道是因爲你正在處理你的圖片後你的內存流? – gunr2171

回答

0

阿我發現在其他線程的響應:

根據該Texture2D.SaveAsJpeg(以及Texture2D.SaveAsPng)具有內存泄漏。 解決方案是(不幸)創建你自己的紋理保存程序。

謝謝XNA。 >>

+0

一個想法。單聲道遊戲是否實現了這些,如果是這樣,你不能使用開源項目中的那些例程(當然有適當的歸因)。你也可以瞄準單聲道遊戲而不是XNA,並獲得跨平臺的優勢。 –