0

出于测试目的,我将代码放入一个 for 循环中,该循环创建并释放一千个 Direct2D 设备,但它从未释放分配的内存:

for (UINT i = 0; i < 1000; i++) {
    hr = m_lpD2DFactory->CreateDevice(lpDxgiDevice, &m_lpD2DDevice);
    m_lpD2DDevice->Release();
}

执行上面的代码需要大约 500MB 的内存。似乎释放设备没有效果。

我很感激任何帮助。

更新

我发现,如果我取消注释其余代码,这会导致使用创建的设备对ID2DRenderTarget::BeginDrawID2DRenderTarget::EndDrawRelease进行一对调用,则该方法将按预期工作。如果我的代码以某种方式没有导致这些调用,它仍然很奇怪并且可能是问题。

hr = m_lpD2DFactory->CreateDevice(lpDxgiDevice, &m_lpD2DDevice);
...
lpRenderTarget->BeginDraw();    
lpRenderTarget->EndDraw();
...
m_lpD2DDevice->Release();
4

0 回答 0