关闭表单不会释放内存

时间:2014-09-20 18:17:01

标签: vb.net memory-management dispose

我知道关于这个主题的问题很少,但我仍未找到对我的问题的真正答案。

我有一个带菜单的MDI表单,当然点击一个菜单项会打开一个表单。

当这个子窗体关闭时,我可以看到没有释放内存(根据任务管理器)。 我知道任务管理器不是很可靠,但它是可靠的,因为如果我一次又一次地打开和关闭表单,应用程序会变慢并且内存使用量会增加。

我在这里找到了一些主题,谈论处理表单并确保表单中没有任何对象具有表单外部其他对象的句柄。 在详细信息中,我发现了这个问题和答案:Unregistering all events to release memory

  

引发事件的对象使处理事件的对象保持活动状态。

所以这可能是我的情况,但我想知道是否有某种方法可以找出whitch是另一个让对象保持活力的对象。 有没有办法获得这些对象的列表?有人可以提供几行代码和/或更清楚吗? 感谢

编辑:一些代码

这是包含菜单并作为MDI容器使用的主窗体。

Partial Public Class FrmMain
    Inherits Telerik.WinControls.UI.RadForm

    Public Sub New()
        InitializeComponent()
        .IsMdiContainer = True
        createMainMenu()
    End Sub

    Private Sub createMainMenu()
            radMenu1.Items.Clear()
            ' First MenuItem
            item = New RadMenuItem
            item.Text = reader.Value
            item.Name = "Registration"
            item.Tag = actualIndex
            item.Visibility = ItemVisibility
            AddHandler item.Click, AddressOf MenuItemClicked
            radMenu1.Items.Add(item)
    End Sub

    Private Sub MenuItemClicked(sender As Object, e As EventArgs)
        Select Case sender.Name
                Case "Registration"
                    Cursor = Cursors.WaitCursor
                    Dim frmRegistration As New FrmRegistration
                    frmRegistration.MdiParent = Me
                    frmRegistration.Show()
                    Cursor = Cursors.Default
        End Select
    End Sub
End Class

这是主表单菜单打开的表单代码

Public Class FrmRegistration
    Public MainForm As FrmMain
    Private myParent As Docking.HostWindow
    Public dbContext As New My_DataEntities

    Private Sub FrmRegistration_Load(sender As Object, e As EventArgs) Handles Me.Load
        loadQueries()   ' A lot of entity framework queries and loads

        ' some FrmRegistration's controls handlers

    End Sub


    Private Sub CommandBarButtonExit_Click(sender As Object, e As EventArgs) Handles CommandBarButtonExit.Click
        Me.Close()
    End Sub

    Private Sub FrmRegistration_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
        If Not dbContext Is Nothing Then dbContext.Dispose()
        dbContext = Nothing
    End Sub

End Class

加载实体使用大约80MB的内存,当我关闭此表单时,看起来这个数量不会被释放。每次打开此表单时,加载过程都会增加大约80MB,在几个打开/关闭周期后似乎是内存泄漏。

0 个答案:

没有答案