为什么我做一个定时器不停的调用以下代码,内存(物理内存和虚拟内存都增长)会不停的增长呢?
BOOL GetHistory()
{
STATURL url;
CString strUrl; ULONG uFetched;
IUrlHistoryStg2Ptr history;
IEnumSTATURLPtr enumPtr; if(FAILED(CoCreateInstance(CLSID_CUrlHistory, NULL, CLSCTX_INPROC_SERVER, IID_IUrlHistoryStg2,(void**)&history)))
{
return false;
} if(FAILED(history->EnumUrls(&enumPtr)))
return false; while(SUCCEEDED(enumPtr->Next(1,&url,&uFetched)))
{
if(uFetched==0)
break;
}
history->Release();
return true;
}
BOOL GetHistory()
{
STATURL url;
CString strUrl; ULONG uFetched;
IUrlHistoryStg2Ptr history;
IEnumSTATURLPtr enumPtr; if(FAILED(CoCreateInstance(CLSID_CUrlHistory, NULL, CLSCTX_INPROC_SERVER, IID_IUrlHistoryStg2,(void**)&history)))
{
return false;
} if(FAILED(history->EnumUrls(&enumPtr)))
return false; while(SUCCEEDED(enumPtr->Next(1,&url,&uFetched)))
{
if(uFetched==0)
break;
}
history->Release();
return true;
}
试试把timer的间隔时间设置长点,看是否情况依旧。。
无论如何这么写都有问题
return false;就返回了,则history就没有被release掉了。所以你调试一下看看。
return false; 直接返回了,不需要Release?
所以加上也一样。
如果屏蔽掉while(SUCCEEDED(enumPtr->Next(1,&url,&uFetched)))
{
if(uFetched==0)
break;
}
,内存就不会增长,为什么?
问题就出在上面的语句里,
怎么释放分配给url的内存?
{
if(uFetched==0)
break;
//怎么在这里把url释放掉?
//有人知道吗?
}
在while外面释放。。
但我不知道该怎么释放,有没有知道的?