VB6内存泄漏

时间:2009-03-23 17:01:45

标签: vb6 memory-management memory-leaks

不包含关键字“New”的VB6程序是否会出现内存泄漏?

如果是,请提供一个例子。

6 个答案:

答案 0 :(得分:4)

总结到目前为止的答案:调用另一个组件可能会引入内存泄漏。组件可能有问题,或者您可能会误用它。该组件可以是OCX或DLL(包括对Windows DLL的API调用,这是泄漏内存和Windows资源的绝佳方式,更不用说其他许多令人兴奋的问题了。)

一个迂腐的观点:你可以使用CreateObject创建对象,这样你就可以通过circular references泄漏内存而不使用Newonedaywhen在评论中指出,您还可以使用表单变量创建循环引用,而不使用New。但我认为问题的关键在于VB6内存泄漏是否会导致除循环引用之外的其他原因。


递归的answer不会导致内存泄漏 - 引用计数会在每次执行循环时整理内存 - 请参阅我对答案的评论。

答案 1 :(得分:3)

您可能正在调用有内存泄漏的第三方DLL。

答案 2 :(得分:2)

是的,它可以。在我了解特定Windows API调用中的内存泄漏之前,我编写的使用Transparent Blits的VB6程序表现出内存泄漏。因此,虽然泄漏不在程序本身,但它是在VB6在Win32 API中调用的函数之一。

答案 3 :(得分:1)

...并且不要忘记OCX中的内存泄漏

答案 4 :(得分:0)

在COM +下运行时,我们在模块中使用全局变量进行了泄漏。这是很久以前不记得的具体细节。

答案 5 :(得分:0)

对内存泄漏的新见解是什么?除了在将参考变量设置为Nothing之后触摸参考变量来分配另一个对象之外,我没有看到任何关系。

如果你这样做,你可能还是有一个逻辑错误。不使用New只是意味着你会爆炸,而不是我想要“修复”任何东西。

最严重的泄漏可能涉及API调用,例如需要对隐式分配的数据结构进行显式清理/释放的OLE或GDI例程。

但正如我所说,将New与内存泄漏联系起来听起来很疯狂。