出于测试目的,我将代码放入for循环中,创建并释放一千个Direct2D设备,但它永远不会释放分配的内存:
for (UINT i = 0; i < 1000; i++) {
hr = m_lpD2DFactory->CreateDevice(lpDxgiDevice, &m_lpD2DDevice);
m_lpD2DDevice->Release();
}
执行上面的代码可以容纳大约500MB的内存。似乎释放设备没有任何效果。
我感谢任何帮助。
更新
我发现如果我取消注释我的其余代码会导致使用创建的设备对ID2DRenderTarget::BeginDraw和ID2DRenderTarget::EndDraw进行一对调用,则Release
方法会按预期工作。它仍然很奇怪,如果我的代码不能导致这些调用,可能会出现问题。
hr = m_lpD2DFactory->CreateDevice(lpDxgiDevice, &m_lpD2DDevice);
...
lpRenderTarget->BeginDraw();
lpRenderTarget->EndDraw();
...
m_lpD2DDevice->Release();