描述:
新键一个类,里边使用了CoCreateInstance函数
在程序运行时控制这个类的new(调用了CoCreateInstance),delete(释放了CoCreateInstance中输出参数的空间,使用release).使用任务管理器观察程序内存分配情况,发现,每调用一次CoCreateInstance多分配4k的内存,而调用delete后,这个4k并没有释放。这样不停调用,所占内存越来越大。
CoInitialize(NULL);和CoUninitialize();调用和释放也有这样的问题
请问应该如何释放这些内存????????
解决方案1:
从你使用DirextXShow的过程来看,没有错误,用CoCreateInstance和CoGetClassObject+CreateInstance的内部调用过程是一样的,我觉得只要使用完以后Release了就可以了(书上讲得,我也不知道对不对!),至于你说的内存增加的问题,可能如yinzhaohui(一切努力)所说,,,我没有说的了。。。。
解决方案2:不要看任务管理器显示的某应用程序的内程使用情况,很不可靠的,因为它给操作系统的内存管理有关系,如你使用了一个new操作建立了4k的空间,再使用delete删除这4k的空是,可能任务管理中的内程还是没有变,因为你使用new中的空间是建立在进程堆中,而很我是由操作系统管理的,所以并不是很准确,但是一点不会无止的增加上去到系统内存用完你可以试试使用循环不断这相操作看内存是否会用完
解决方案3: 是系统有4K内存没有释放,还是你自己写得类里有4k内存没有释放?你是怎么知道有4k内存没释放的?
这也可能和dshow有关系,不用dshow,试试看其它的COM对象.
调用
CoFreeUnusedLibraries试试
友情UP
解决方案6: CoGetClassObject(rclsid, dwClsContext, NULL, IID_IClassFactory, &pCF);
hresult = pCF->CreateInstance(pUnkOuter, riid, ppvObj)
pCF->Release();
您可能想查找下面的文章:
- CoCreateInstance和CoCreateInstanceEx的区别??
- 抓狂!看了几天了,CoCreateInstance总是出错!!!!救命啊!
- 请教CoCreateInstanceEx产生E_ACCESSDENIED的原因
- CoCreateInstance的内部实现问题??
- 在DEV-CPP中编译建立快捷方式代码出现incompatibletypeforargument1of`CoCreateInstance'
- 用dll的COM除了cocreateinstance能不能就当普通DLL用loadlibrary调用。
- CoCreateInstanceEx问题
- CoCreateInstance调用成功,CoGetClassObject调用失败,为什么?
- CoCreateInstance调用出错,帮看看!
- CoCreateInstance的问题