我的 SlimDX / DirectX 应用程序有问题。我有一个使用 SlimDX 制作的循环MessagePump
,我的应用程序使用过多的内存时遇到了问题,内存量正在增加。我试图找到我的代码的哪一部分,我发现它可能是这样的:
var vertexElems = new[] {
new VertexElement(0, 0, DeclarationType.Float4, DeclarationMethod.Default, DeclarationUsage.PositionTransformed, 0),
new VertexElement(0, 16, DeclarationType.Color, DeclarationMethod.Default, DeclarationUsage.Color, 0),
VertexElement.VertexDeclarationEnd
};
var vertexDecl = new VertexDeclaration(device, vertexElems);
这部分代码在一个恒定循环 ( MessagePump.Run()
)中运行,每秒它会多消耗大约 2 MB 的内存。
如何避免内存泄漏VertexDeclaration
?也许SlimDX 的 VertexDeclaration 的 C++ 源代码有问题?还是我必须定义VertexDeclaration
循环的外部?为什么垃圾收集器不处理它?
还有一个与此相关的类似问题:如果我在循环中定义新变量是否有问题,而实际上我只使用它们一次?例如这段代码:
Matrix T, S;
T = Matrix.Translation(mShipPos.X, mShipPos.Y, mShipPos.Z);
S = Matrix.Scaling(20.0f, 20.0f, 0.0f);
mSprite.Transform = S * T;
循环运行。这是一个问题,我应该在循环之外定义矩阵 T 和 S,还是垃圾收集器会处理这个问题?我一直在研究几个示例源代码,许多程序员都这样做——但是在循环中运行时它不会使用越来越多的内存吗?