DirectX api(AMDのドライバ)に問題が見つかりました。 インクリメンタルサイズのcreateBuffer()を使用してd3dバッファを作成し、forループでそれをリリースすると、メモリ診断ツールはプロセスのプライベートバイトサイズが絶えず増加していることを示します。私は、GPUマップされたシステムメモリが決して解放されないためかもしれないと思う。ところで、CPUのヒープサイズは安定しています。さまざまなサイズのd3dBufferがリリースされていません
- 千反復バッファサイズは1000に1キロバイトから始まりFOR MB
- CreateBuffer D3D11_USAGE_STAGING/D3D11_USAGE_DYNAMIC & D3D11_CPU_ACCESS_WRITE
- d3dbuffer.Release & d3dbuffer = nullptr
- コンテキストを使用して。 cleastate()とフラッシュは()同期解放する
for (unsigned long long totalSize = 1MB; totalSize <= 1000MB ; totalSize += 1MB)
{
// create
CComPtr<ID3D11Buffer> pd3dBuffer;
D3D11_BUFFER_DESC bufferDesc;
{
ZeroMemory(&bufferDesc, sizeof(bufferDesc));
bufferDesc.ByteWidth = static_cast<UINT>(bufferSize);
bufferDesc.Usage = D3D11_USAGE_DYNAMIC;
bufferDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
bufferDesc.MiscFlags = 0;
bufferDesc.StructureByteStride = 0;
}
HRESULT hr = pd3dDevice->CreateBuffer(&bufferDesc, NULL, pd3dBuffer);
if (FAILED(hr)) break;
//release
pd3dBuffer.Release();
pd3dDeviceContext->ClearState();
pd3dDeviceContext->Flush();
}
d3dbufferプロセスのメモリ使用量が上がり続け、最終的に私の物理メモリの16ギガバイトの制限やクラッシュに達しているため。これは、作成直後にバッファを同期的に解放するため、変です。プロセスメモリの使用率は比較的安定している必要があります。 ダイレクトメモリ管理がどのように機能しないのか説明できる人はいますか?
待つ私は文書を見てみる –
マッピング後にバッファのマッピングも解除されていますか? –
マッピングのマッピングが解除されていません。同期削除(遅延なし)を作成するだけです。 – shorttermmem