GraphicsDevice.内存不足

本文关键字:内存不足 GraphicsDevice | 更新日期: 2023-09-27 17:50:58

这应该是XNA的bug。

我有两个3d模型,currentModel和nextModel,我想在这两个模型上应用特殊效果,说变形到另一个。

代码:

void DrawModelMorphing(Model currentModel, Model nextModel)
{    
    int targetIndex = 0;
    foreach(var mesh in currentModel.Meshes.Count)
    {
        foreach(var mp in mesh.MeshParts)
        {
            GraphicsDevice.Indices = mp.IndexBuffer;
            VertexBufferBinding[] vertexBufferBindings = new VertexBufferBinding[2];
            vertexBufferBindings[0] = new VertexBufferBinding(mp.VertexBuffer, mp.VertexOffset);
            vertexBufferBindings[1] = new VertexBufferBinding(nextModel.Meshes[targetIndex].MeshParts[0].VertexBuffer, nextModel.Meshes[targetIndex].MeshParts[0].VertexOffset);
            GraphicsDevice.SetVertexBuffers(vertexBufferBindings);

            mEffect.CurrentTechnique.Passes[0].Apply();
            GraphicsDevice.DrawIndexedPrimitives(
            PrimitiveType.TriangleList,
            0,
            0,
            mesh.MeshParts[0].NumVertices,
            mesh.MeshParts[0].StartIndex,
            mesh.MeshParts[0].PrimitiveCount);
            //vertexBufferBindings[0].VertexBuffer.Dispose(); //exception 
            //vertexBufferBindings[1].VertexBuffer.Dispose(); //exception 

        }
    }
    targetIndex++;
    }
}

GraphicsDevice.SetVertexBuffers会导致严重的内存泄漏,30分钟300MB,然后"Out of memory "

这是一个类似的问题在不同的函数调用:绘制立方体时出现OutOfMemory异常

Something I had test:

1)如果我全局定义vertexBufferBindings[],问题仍然存在。

2)如果我处理顶点缓冲区,将会出现异常。"类型为'System '的第一次异常。ObjectDisposedException' occurred in Microsoft.Xna.Framework.dll"

3) GC和一些第三方工具如freeMem也不能工作。

有人能帮忙吗?

我几乎想放弃在我的项目中使用XNA。

谢谢。编辑:

解决方案是缓存我需要的一切,例如:VertexBuffer和Textural

GraphicsDevice.内存不足

你是否对那些你分配的元素调用过DISPOSE ?如果不是——不,抱歉,设备内存是非托管的,相应的类必须实现IDisposable,并且必须清理。

如果您认为GC有帮助,那么这确实会发生。