C ++ DirectX 11内存管理问题与发布ShaderResourceView有关

时间:2014-04-11 23:53:14

标签: c++ memory directx textures

我正在查看我的任务管理器的进程,我可以看到,当我启动我的项目时,它使用2.2k内存,当我加载纹理时,它会升至2.7k,但当我释放纹理资源时,删除纹理类对象应用程序内存减少到2.5k。我非常担心这个没有被释放的内存,并且希望有人可以让我知道我做错了什么,或者可能有一个垃圾收集器会随着时间的推移释放我不知道的内容?或者,任务管理器进程可能不是确定我的应用程序使用的内存的实用方法吗?

在这里,我初始化我的纹理类并加载我的纹理,然后我内在地释放它(用于测试目的)。

test = 0;

test = new Texture2D;

test->Initialize(m_DX3D->GetDevice(), "../3rd Year Project/Content/Fonts/DialogFont");

//break here

test->Shutdown();
delete test;
test = 0;

// Texture2D.cpp

bool Texture2D::Initialize(
_In_ ID3D11Device* device, 
_In_ LPCSTR path)
{
HRESULT result;

char buffer[256];

strncpy(buffer, path,     sizeof(buffer));
strncat(buffer, ".png",   sizeof(buffer));

result = D3DX11CreateShaderResourceViewFromFile(device, buffer, NULL, NULL, &m_texture, NULL);

if(FAILED(result))
    return false;

return true;
}

1 个答案:

答案 0 :(得分:1)

你是对的 - 任务管理器不是一个合适的工具。它只显示了应用程序为它保留了多少内存,而不是它实际使用了多少保留内存!

只有当内存使用量稳步增长到不合理的大小时,您才能在运行时检测内存泄漏,因此您需要更好的工具。

我指出Massif只是因为它在this thread here at SO被提及,你必须自己评估它...