我编了一个有关图像识别的MFC程序,在主面板类的按钮消息映射中循环调用一个图像处理类的函数,该函数每执行一次都new一段内存,退出之前delete释放内存。
问题是:我运行程序的时候打开任务管理器,在性能选项卡里监控内存使用情况,发现内存一直猛的上升,最后升到2.7G左右,程序弹出系统提示“内存不足”。但是在任务管理器的进程选项卡里监控该程序所在的进程的内存使用情况是,发现内存一直不变,一直保持在10M左右。
非常着急,请高手指点迷津
问题是:我运行程序的时候打开任务管理器,在性能选项卡里监控内存使用情况,发现内存一直猛的上升,最后升到2.7G左右,程序弹出系统提示“内存不足”。但是在任务管理器的进程选项卡里监控该程序所在的进程的内存使用情况是,发现内存一直不变,一直保持在10M左右。
非常着急,请高手指点迷津
CheckPic()
{
lpImage = (LPBYTE) new char[lmageWidth*lmageHeight*4];
………
………
…………
delete [] lpImage;
return;
}
file.Open("picture\\mysnap.bmp", CFile::modeRead | CFile::shareDenyWrite);
m_hDIB=m_dib.LoadFile(file);// 调用ReadDIBFile()读取图象
file.Close();
if(m_hDIB==NULL)
{
AfxMessageBox("读取图象时出错");
return;
} // 指向DIB的指针
LPSTR lpDIB;
// 指向DIB象素指针
LPSTR lpDIBBits;
// 锁定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB);
// 找到DIB图像象素起始位置
lpDIBBits = m_dib.GetBits(lpDIB);
// 更改光标形状
BeginWaitCursor();
//进行处理
while (1)
{
m_carTest.CheckPic(lpDIBBits, m_dib.GetWidth(lpDIB), m_dib.GetHeight(lpDIB),m_pRoadInfo);
}
在死循环里的函数基本都没用到什么句柄,应该不是这种问题。
CheckPic函数的大概样子我之前已经贴出来了,现在的问题就是虚拟内存一直升,不知道为什么