0

我正在使用一个永恒库(DLL)以某种文件格式加载,并发现加载函数实际上并没有加载。它会在第一次为同一个对象调用时加载,但如果我再次调用它来打开一个新文件,它并不总是加载。这迫使我每次想加载新文件时都调用 CreateObject。问题在于 VB6 似乎根本没有释放旧对象,并且 RAM 和 VM 使用量迅速膨胀到 GB。

有没有办法强制它释放?将变量设置为“Nothing”或“Null”不会做任何事情,并且应用程序会膨胀得如此之多,以至于实际上会耗尽内存并崩溃。(我必须在 VM 中运行它,因为 IDE 太旧了,无法在 Win7 上运行,我无法让它运行)

我已经寻找循环引用,但没有,文件是使用该对象加载的,文件的属性被读入 ADO 对象,实际文件本身从未被引用到 ADO 对象中,只是各种字段从中。

4

1 回答 1

1

无论您在 VB6 项目中有直接引用还是使用“CreateObject”实例化对象引用都无关紧要。如果第三方组件有内存泄漏,无论哪种方式,您都会遇到相同的行为。

如果要实例化非托管资源,则需要调用“Dispose”。除此之外,当方法调用完成并且 Visual Basic 运行时将清理引用(使用引用计数)时,对象实例将“超出范围”。如果第三方组件确实存在内存泄漏,您需要让他们修补 DLL,因为您无法阻止它。

于 2013-04-12T03:06:16.853 回答