(讨论)这样是否反而会导致内存泄露?
Private Structure Info
Dim Name As String
Dim Child() As String
End Structure
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
Dim H(10) As Info
H(0).Name = "aaa "
ReDim H(0).Child(2)
H(1).Name = "bbb "
ReDim H(1).Child(2)
......
Erase H
End Sub
之所以说“反而”,是因为H数组为内部对象,.Net垃圾回收机制原本会伺机自动释放它。
但现在加了最后一句“Erase H”手动释放H所占的内存,这之前却并没有用循环语句去Erase H(i).Child,那么“Erase H”这句能连它们的Child数组一块儿释放吗?
如果不能,.Net因见H被手动释放又不做自动回收,那些已分配的Child岂不就造成了内存泄露?
------解决方案--------------------H的Child对象会被垃圾回收器释放。
CLR垃圾回收器的主要原理是,当一块内存不在有引用他的对象。
经过一段时间后就会被自动回收。
H对象已经不存在时。它所使用的内存将被自动释放。
当然前提是你在程序中没有再给他传给其它全局变量。