我的SlimDX/DirectX應用程序出現問題。我有一個循環使用SlimDX的MessagePump
,並且我的應用程序使用過量的內存時出現問題,而內存越來越多。我試着找一下我的代碼的一部分這樣做,而且我發現,它可能是這樣的:SlimDX VertexDeclaration內存泄漏? - 如何避免它?
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
?也許C++ source code of SlimDX's VertexDeclaration有什麼問題嗎?或者我必須在循環外定義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,還是垃圾收集器處理這個問題?我一直在研究幾個示例源代碼,許多程序員都這樣做 - 但是在循環中運行時不會使用越來越多的內存?
謝謝,我在使用vertexDecl.Dispose()之後使用它,它不再使用越來越多的內存。也感謝您解釋垃圾回收器問題。 :) – TomsonTom