2013-01-09 39 views
0

我有一小段代碼,我希望在特定點的GC會擦除內存,而不是內存不足。未由GC發佈的VB.NET內存

這是GC的正確行爲嗎?

Private Sub Form1_Load() 
    Dim WasterWrapper as cMyClass 
    For MapIndex = 1 To 50 
     WasterWrapper = New cMyClass 
    Next 
End Sub 

這是我除去的Finalize()之後現在GC可以釋放存儲器中作爲我預期其分配內存

Public Class cMyClass 


Private mArry(,) As Double 

Sub New() 

    Dim i As Integer 
    Dim j As Integer 

    ReDim mArry(5000, 5000) 

    For i = 0 To 5000 
     For j = 0 To 5000 
      mArry(i, j) = Rnd() * 1000 
     Next 
    Next 

End Sub 

Protected Overrides Sub Finalize() 

    MsgBox("Finalising the wrapper") 
    MyBase.Finalize() 

End Sub 
End Class 
+1

內存不會自動釋放。 GC必須運行,它會在感覺它是必要的時候運行。我注意到你實現了finalize方法。這會在釋放之前增加所需的時間,因爲對象將在釋放之前放入最終隊列中。您可以嘗試'GC.Collect'來測試強制GC運行。但是在正常情況下使用這個請注意,這是不推薦的。 –

回答