我使用此功能在我的win32应用程序中打开文件:
string OpenDialog(HWND hwnd)
{
OPENFILENAME ofn;
TCHAR szFile[MAX_PATH];
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.hwndOwner = hwnd;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = TEXT("All files(*.*)\0*.*\0");
ofn.nFilterIndex = 1;
ofn.lpstrInitialDir = NULL;
ofn.lpstrFileTitle = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if(GetOpenFileName(&ofn))
return ofn.lpstrFile;
}
这很简单,我称之为:
string path = OpenDialog(hwnd);
问题是我发现此功能会导致大量内存泄漏! 我不是100%确定发生了什么,但每次使用此功能打开一个新文件时,我的应用程序在RAM中变得越来越大。 我100%确定原因是这个功能,因为如果我不使用此功能加载文件,我就会有稳定的内存负载。
请提示吗? 非常感谢!
答案 0 :(得分:1)
当您调用API时,Windows会加载shell界面&还调用shell扩展处理程序。如果第三方shell扩展dll引入了内存泄漏,则它将不可见。 Windows还通过保留对某些shell对象的引用来进行一些优化,以便在连续打开时更快地加载打开文件对话框。这可能会导致内存使用量增加,您将在第一次加载时看到内存峰值。