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
を定義する必要がありますか?なぜガベージコレクタはそれを処理しないのですか?
これに関連する同様の質問:実際にループを1回だけ使用すると、ループ内に新しい変数を定義すると問題はありますか?たとえば、次のコード:
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