Я уже прочитал тонну тем о "утилизации класса", и я понял, как это сделать, и это прекрасно работает!В то же время «форма удаления» не то же самое, и ресурсы все еще протекают!
Что я делаю:
Инициализация формы с помощью метода «using»:
Using f as New Form
f.ShowDialog()
'my code
End using
В этом случаеформой «end using», оканчивающейся методом «Dispose».
Например:
У меня есть форма, у которой есть класс (он содержит параметры и другие классы).При событии формы инициализации форма (сама по себе) занимает 12 МБ памяти (я измеряю ее в проводнике процессов), и плюс мой класс занимает 10 МБ (который удаляется, а также удаляется до формы Dispose по событию Dispose).После удаления моей формы (я снова ее измеряю) я вижу, что мой класс удален, а ресурсы (класса) полностью бесплатны, форма не освобождает ресурсы.Другими словами, я убиваю 10 МБ (класса), НО не убиваю 12 МБ (формы).
Мой код удаления:
Private Sub Form_Disposed(sender As Object, e As EventArgs) Handles
Me.Disposed
If Not fDisposed Then
MyPersonalClass.Dispose()'class
MyPersonalClass = Nothing
fDisposed = True
GC.SuppressFinalize(Me)
GC.Collect()
Finalize()
End If
End Sub
Это очень плохо.Если большую часть времени я работаю с этими формами и если они не освобождают ресурсы после утилизации, каждая открытая форма будет оставлять около 10-12 МБ в памяти после закрытия.И если я открою свою форму 100 раз, она замерзнет более чем на 1 ГБ памяти.
Что я делаю не так?