Dam*_*Gal 2 excel vba memory-leaks
我发现,如果您在其中引用了parent,则该类不会自动刷新。例如这样的事情:
Private Sub test()
Dim a As New settings
Dim b As New Collection
b.Add a
Set a = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
在“设置”类中:
Private SQLSettings As New settingsserver
Private Sub Class_Initialize()
Me.SQLSettings.Initialize Parent:=Me
MsgBox "init"
End Sub
Private Sub Class_Terminate()
MsgBox "terminate"
End Sub
Run Code Online (Sandbox Code Playgroud)
因此,基本上,如果我删除Parent:= Me,它将终止设置类,但是如果我离开它,它将保留在垃圾收集器中。这是为什么?该类有一个引用该类的子类,因此它不刷新整个包吗?如何参考父类自动刷新类?
没有垃圾收集器,VBA是引用计数的,不是垃圾收集的。
如果对象具有> 0个引用,则该对象不会终止。结果,如果一个或多个子对象正在引用父对象,则使父对象为空不会破坏任何对象。
也没有帮助,Dim...As New创建自动实例化对象 -你要疯狂地避免这种情况。
很难显示出这么少的代码就可以在哪里插入它,但是从根本上讲,您需要先将子对象显式地移到Set Parent = Nothing另一点,然后再尝试使父对象为空。
如果您喜欢冒险,可以使用WeakReferences(免责声明:我写那篇文章)避开这个问题,但这可能有点不稳定或容易崩溃。
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |