起初我的英语不好。如何解决BSTR泄漏内存COM对象?
我正在使用Microsoft ISA Server 2006 C++编程SDK。
我从isa服务器获取isa服务器的信息,需要BSTR变量,但它使内存泄漏,并且使用::sysFreeString(BSTR)
它不能解决内存泄漏问题。 我该怎么做?
FPCLib::IFPCLogEntryPtr::get_ClientIP(BSTR *);
起初我的英语不好。如何解决BSTR泄漏内存COM对象?
我正在使用Microsoft ISA Server 2006 C++编程SDK。
我从isa服务器获取isa服务器的信息,需要BSTR变量,但它使内存泄漏,并且使用::sysFreeString(BSTR)
它不能解决内存泄漏问题。 我该怎么做?
FPCLib::IFPCLogEntryPtr::get_ClientIP(BSTR *);
默认情况下,COM BSTR
值由运行时库,这不能不让泄漏的外观随着时间的推移缓存。即使你自己的代码没有泄漏,堆的大小仍然会增长 - 非常烦人。
如果你想排除这个原因,你可以使用SetOaNoCache API来禁用。
如果在完成此操作后仍然存在明显泄漏,则可以使用Process Dumper来追踪它,以获取连续的快照,然后再次运行以进行比较。如果可能的话,针对您的Debug版本运行此操作,因为在这种情况下,调用堆栈更容易解密。
SetOaNoCache API。在Windows Server 2003上不起作用 – sam
您是否尝试了Process Dumper? –
建议你发布(削减)代码 –
你用SysAllocString分配它吗? –
@sam:您应该发布您的代码以帮助我们,但无论如何,请查看http://msdn.microsoft.com/en-us/library/xda6xzx7(v=vs.71).aspx, Hth :) –