2

私が direct3d のために取っているチュートリアルには、次のように書かれています。

「... 基本的に、Direct3D を作成しても閉じない場合、プログラム自体が閉じられた後でも、次の再起動までコンピューターのバックグラウンドで実行され続けるだけです。悪い。特に悪いこれら 2 つのインターフェイスを解放すると、すべてがオフフックになり、Windows がメモリを取り戻すことができます。」(リンク)

このチュートリアルが言っていること、プロセスを終了した後もリソースがまだぶら下がっているとは本当に信じていません...

プログラムがクラッシュしたり、デバッグ中に停止を押したりした場合のように、リソースはまだぶらぶらしていますか? また、directx を使用する他のゲームでは、プロセスを強制終了して閉じることがよくあります。

プロセスを終了し、device->Release を呼び出さない場合、リソースはオペレーティング システムに解放されますか?

4

2 に答える 2

4

簡単に言えば、いいえ。そうではありません。プロセスが終了すると、すべての DirectX リソースが解放され、GPU やシステム メモリがリークすることはありません。

于 2011-05-26T15:15:25.613 に答える
1

メモリ、スレッド、ハンドルなどのプロセス関連のリソースが再利用されるのは事実ですが、D3D はビデオ ハードウェアのメモリとリソースも利用していることを思い出してください。特定の実装によっては、シャットダウンしていることを D3D に通知しないと、プロセスの終了時にこれらすべてをクリーンアップできる場合とそうでない場合があります。

EvictManagedResources呼び出しが行われるまでクリーンアップに失敗したマネージド DX9 インターフェイスを使用するソフトウェアで、非常に興味深いレンダリング アーティファクトが発生するのを見てきました。これらのアーティファクトは、自動化されたテスト スイートで発生しました。はい、同じプロセスの個別の呼び出し間で (ディスプレイ/フレーム バッファー上のガベージの小さな四角形として) 存続しました。

適切にコーディングされたアプリは、内部例外に適切に反応したり、終了要求 (WM_QUERYENDSESSION など) を処理したり、このクリーンアップを実行したりできます。

于 2011-05-26T16:05:25.923 に答える