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
你是否对那些你分配的元素调用过DISPOSE ?如果不是——不,抱歉,设备内存是非托管的,相应的类必须实现IDisposable,并且必须清理。
如果您认为GC有帮助,那么这确实会发生。