我注意到了DirectX api(來自AMD的驅動程序)的問題。 如果我使用增量大小的createBuffer()創建d3d緩衝區並將其釋放到for循環中,內存診斷工具將顯示進程的專用字節大小不斷增加。我認爲這可能是因爲GPU映射的系統內存從未釋放。順便說一下,cpu堆大小是穩定的。用各種尺寸創建的d3dBuffer沒有發佈
- FOR 1000迭代緩衝器大小開始於1KB至1000使用MB
- CreateBuffer D3D11_USAGE_STAGING/D3D11_USAGE_DYNAMIC & D3D11_CPU_ACCESS_WRITE
- d3dbuffer.Release & d3dbuffer = nullptr
- 上下文。 cleastate()和flush()同步發佈d3dbuffer
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();
}
因爲進程的內存使用不斷上升,最終達到我的身體16GB的內存限制和崩潰。這很奇怪,因爲我在創建後同步釋放緩衝區。進程內存使用應該相對穩定。 有沒有人可以解釋如何不直接執行內存管理工作?
等待我看看文檔 –
在映射它之後,您是否也將緩衝區解映射? –
沒有涉及的映射未映射。只是創建一個同步刪除(不延遲)。 – shorttermmem