我正在使用永久库(DLL)加载某种文件格式,并发现加载函数实际上没有加载。它将在第一次为同一个对象调用时加载,但是如果我再次调用它来打开一个新文件,它并不总是加载。每次我想加载一个新文件时,这都迫使我调用CreateObject。这个问题是VB6似乎根本没有释放旧对象,RAM和VM的使用很快膨胀到GB。
有没有办法强迫它释放?将变量设置为“Nothing”或“Null”不会做任何事情,应用程序会膨胀太多,实际上会耗尽内存并崩溃。 (我必须在VM中运行它,因为IDE太老了,它在Win7上不起作用,我无法让它工作)
我已经查找了循环引用,但是没有,使用该对象加载文件,文件的属性被读入ADO对象,而实际文件本身从未被引用到ADO对象中,只是它的各个领域。
答案 0 :(得分:1)
无论是在VB6项目中有直接引用还是使用“CreateObject”来实例化对象引用都无关紧要。如果第三方组件有内存泄漏,您将会遇到相同的行为。
如果要实例化非托管资源,则需要调用“Dispose”。除此之外,当方法调用完成并且Visual Basic运行时将清理引用(使用引用计数)时,对象实例将“超出范围”。如果第三方组件确实有内存泄漏,您需要让他们修补DLL,因为没有什么可以阻止它。