我有一个具有MyDataObject类的COM组件。有具有以下签名的方法:COM类在.NET中返回byte [] - 是否释放内存
HRESULT MyDataObject::GetData(long Format, VARIANT* retval)
这COM对象在.NET应用程序使用,并且该方法返回任一取决于格式值的字符串或字节数组。返回的值在.NET中转换为byte []并使用。
我怀疑这种方法泄漏内存即从这个方法返回的字节数组需要被释放某种方式。当我调试应用程序时,我看到GetData(...)方法调用在每次调用时占用内存。我不知道如何释放这些内存,我可以将它更改为hGlobal,然后调用ReleaseHGlobal(...)或者还有其他方法吗?
修订
是的,我使用任务管理器,看看有多少内存被使用的示例应用程序。当我启动应用程序时,它保持在16MB,但只要我点击测试按钮来调用这个GetData(...)方法大约850次,内存就开始增加,TaskManager显示应用程序的内存使用增加了大约25MB。
我在原帖中增加了一些细节。如果任务管理器给出了错误的印象,那么您是否知道可用于监视应用程序的正确内存使用情况的任何其他工具。另外,当在主应用程序(而不是样本)中调用该方法时,它会在每次操作(即850次调用)之后增加内存(在TaskManager中)。内存似乎没有下降,我猜这意味着它正在被这个COM组件持有。这在内存使用方面给应用程序留下了不好的印象。 – A9S6 2010-06-21 15:27:21
我不知道850电话会做什么。我*确实意味着一百万。 – 2010-06-21 15:33:55
“CLR中的COM互操作层在将它的值复制到对象后已经释放了变体”......您能指出我解释此行为的一些文章吗? – A9S6 2010-06-22 09:46:07