CoCreateInstance 内存问题

kingofhell 2005-03-03 11:59:29
新键一个类,里边使用了CoCreateInstance函数
在程序运行时控制这个类的new(调用了CoCreateInstance),delete(释放了CoCreateInstance中输出参数的空间,使用release).使用任务管理器观察程序内存分配情况,发现,每调用一次CoCreateInstance多分配4k的内存,而调用delete后,这个4k并没有释放。这样不停调用,所占内存越来越大。

CoInitialize(NULL);和CoUninitialize();调用和释放也有这样的问题

请问应该如何释放这些内存????????
...全文
367 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hushuangyan74 2005-03-04
  • 打赏
  • 举报
回复
从你使用DirextXShow的过程来看,没有错误,用CoCreateInstance和CoGetClassObject+CreateInstance的内部调用过程是一样的,我觉得只要使用完以后Release了就可以了(书上讲得,我也不知道对不对!),至于你说的内存增加的问题,可能如yinzhaohui(一切努力)所说,,,我没有说的了。。。。
kingofhell 2005-03-04
  • 打赏
  • 举报
回复
结束了,想想可能影响不太大吧,呵呵
xuzheng318 2005-03-03
  • 打赏
  • 举报
回复
CoGetClassObject(rclsid, dwClsContext, NULL, IID_IClassFactory, &pCF);
hresult = pCF->CreateInstance(pUnkOuter, riid, ppvObj)
pCF->Release();
kingofhell 2005-03-03
  • 打赏
  • 举报
回复
呵呵,狠毒得一招啊,恩,明天到公司去试试看,哈哈。
yinzhaohui 2005-03-03
  • 打赏
  • 举报
回复
不要看任务管理器显示的某应用程序的内程使用情况,很不可靠的,因为它给操作系统的内存管理有关系,如你使用了一个new操作建立了4k的空间,再使用delete删除这4k的空是,可能任务管理中的内程还是没有变,因为你使用new中的空间是建立在进程堆中,而很我是由操作系统管理的,所以并不是很准确,但是一点不会无止的增加上去到系统内存用完你可以试试使用循环不断这相操作看内存是否会用完
kingofhell 2005-03-03
  • 打赏
  • 举报
回复
新键一个mfc工程,然后新键一个普通类,在构造函数里边写CoInitialize(NULL);
在析构函数中用CoUninitialize();

弄两个按纽,一个用来new类,一个用来delete类。系统是测试用了2000和xp,轮流按,用任务管理器的进程看。内存使用情况,每次会增加4k的内存(并不是按一次就加一次,而是可能要轮流按几次才会加)。上边两个函数跟dshow没关吧,呵呵
ColderRain 2005-03-03
  • 打赏
  • 举报
回复
是系统有4K内存没有释放,还是你自己写得类里有4k内存没有释放?你是怎么知道有4k内存没释放的?
这也可能和dshow有关系,不用dshow,试试看其它的COM对象.
kingofhell 2005-03-03
  • 打赏
  • 举报
回复
还是不行。呵呵
dongfa 2005-03-03
  • 打赏
  • 举报
回复
调用
CoFreeUnusedLibraries试试
Featured 2005-03-03
  • 打赏
  • 举报
回复
友情UP
kingofhell 2005-03-03
  • 打赏
  • 举报
回复
这样虽然可以创建多个instance提高效率,但是分配的内存还是无法释放掉的。(用的dshow)
比如
CoInitialize(NULL);和CoUninitialize();调用和释放也有这样的问题这段
或者
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void**)&m_pGraph);最后m_pGraph会被release
或者
CoGetClassObject(CLSID_FilterGraph, CLSCTX_INPROC_SERVER,
NULL, IID_IClassFactory, (void**)&pCF);

hr = pCF->CreateInstance(NULL, IID_IGraphBuilder, (void**)&m_pGraph);最后m_pGraph会被release
pCF->Release();

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧