2017-01-07 36 views
0

DirectX APIを使用して、システムメモリからGPUメモリへの書き込み速度をテストするベンチマークアプリケーションを作成したいと思います。しかし、私は単にループを作成してforループでリリースしても、メモリ診断ツールはプロセスのプライベートバイトサイズが絶えず増加していることを示しています。私は、GPUマップされたシステムメモリが決して解放されないためかもしれないと思う。ところで、ヒープサイズは安定しています。DirectX CreateBufferメモリリーク

1. FOR 1000 iteration 
2. CreateBuffer using 
       D3D11_USAGE_STAGING/D3D11_USAGE_DYNAMIC 
       & D3D11_CPU_ACCESS_WRITE 
3. d3dbuffer.Release & d3dbuffer = nullptr 

誰かが正しくリリースする方法を説明できますか?これは、いわゆるマップされたAGPメモリですか?

答えて

1

Direct3Dは遅延リソースの破壊を使用します。すべてのリソースを強制的にクリーンアップする場合は、Flushに電話する必要があります。 Direct3Dの効果的なベンチマークを書くことは、あなたがおそらく欠けていることが多いため、非常に困難です。これのいくつかの意味については

Accurately Profiling Direct3D API Callsを読み、Profiling DirectX Apps

+0

を見るには、あなたにチャックをありがとうございました。すべての繰り返しに対して、私はflushを呼び出して、コマンドバッファの空のシグナルを問い合わせます。しかし、私はビジュアルスタジオ2015診断ツールを使用してメモリ使用量を確認すると、それはまだ増加しており、決して下がることはありません。システムメモリがなくなると、アプリケーションがクラッシュします。この記事ではAPIのプロファイリングについて非常にうまく説明していますが、メモリ管理について十分な情報をカバーしていませんでした。バッファサイズを制限するアイデアは何ですか?どうもありがとうございます! – shorttermmem

+0

ID3D11Debugとデバッグデバイスを使用して、d3dオブジェクトが漏洩していないことを確認しました。ヒープは安定しています。しかし、プライベートバイトは数回の繰り返しごとに上昇し続けます。最終的に、使用可能な16GBメモリを使用しているときにアプリがクラッシュします。 – shorttermmem