1
例如,我在循環中運行的代碼:IASetIndexBuffer內存泄漏原因
m_device->CreateBuffer(&index_buffer_desc, &index_data, &buffer);
Release(buffer);
其中m_device是ID3D11Device和緩衝器是ID3D11Buffer
沒有泄漏 - 我創建對象,然後破壞它。
如果我把它安裝到管道,像這樣:
m_device->CreateBuffer(&index_buffer_desc, &index_data, &buffer);
m_device_context->IASetIndexBuffer(buffer, DXGI_FORMAT_R32_UINT, 0);
Release(buffer);
比內存泄漏開始。
MSDN對IASetIndexBuffer說:「該方法不會持有對傳入接口的引用。因此,應用程序應小心不要釋放當前正在使用的接口。」
好的。我重置索引緩衝區後附加:
m_device->CreateBuffer(&index_buffer_desc, &index_data, &buffer);
m_device_context->IASetIndexBuffer(buffer, DXGI_FORMAT_R32_UINT, 0);
m_device_context->IASetIndexBuffer(NULL, DXGI_FORMAT_R32_UINT, 0);
Release(buffer);
但內存盜竊泄漏。
是什麼原因?這個東西還在哪裏?
如何檢查內存是否泄漏?如果沒有更多的外部引用,DirectX會使用一些內部引用,這些引用最終可能會被丟棄。 –
剛剛看了一下任務管理器 - 應用程序增長10mb /秒(specialy運行沒有vsync) – acrilige
嘗試在上下文中調用'ClearState()'和'Flush()'。順便說一句,你確定你需要一個新的索引緩衝區每幀? –