读书人

(讨论)这样是否反而会导致内存泄露?

发布时间: 2012-03-09 21:42:55 作者: rapoo

(讨论)这样是否反而会导致内存泄露?
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对象已经不存在时。它所使用的内存将被自动释放。
当然前提是你在程序中没有再给他传给其它全局变量。

读书人网 >.NET Framework

热点推荐