持久Winform用户控件和内存不足异常

时间:2013-07-10 18:42:15

标签: vb.net winforms memory memory-leaks resources

我有一个Winform应用程序,我正在使用WCF和SQL。用户用于创建报告的程序的一部分将动态创建自定义用户控件,并将对它们的引用放入我维护的哈希表中。然后,当用户通过选择树视图上的节点来浏览报表时,我将用户控件加载到面板中并将其卸载。

以下是我用来创建它们并将它们放入Collection

的代码
    ucIncidentInstance = New ucIncidentMR(IncidentReport, IncidentReportGUID)
    ucIncidentInstance.Tag = "IncidentMR"
    ucIncidentInstance.Dock = DockStyle.Fill
    Globals.ControlTable.Add(IncidentReportGUID, ucIncidentInstance)
    Globals.GlobalNode.Nodes.Add(IncidentReportGUID, "Incident Report")

以下是用户在树视图中导航时在窗体上移入和移出Panel的代码

    If Globals.ControlTable.ContainsKey(e.Node.Name) Then
        panelMain.Controls.Clear()
        panelMain.Controls.Add(CType(Globals.ControlTable(e.Node.Name), UserControl))
    Else
        If e.Node.Name = "MainNode" Then
            panelMain.Controls.Clear()
        End If
    End If

这是我在表单Closing事件中使用的代码,用于在用户关闭此案例时尝试清理内存。我使用和不使用.Dispose()行和= Nothing行完成了它。此代码确实已执行但似乎没有帮助。

    For Each item In Globals.ControlTable
        item.Value.Dispose()
    Next

    Globals.ControlTable.Clear()

当我进入内存分析器时,即使创建它们的表单已从内存中卸载,控件也会保留在内存中。分析器报告上面列出的控件的内存为8818k。当报告关闭而另一个打开时,此控件的保留内存增加8818k。对于每个打开的报告,并继续增加该金额。可以想象,打开和关闭大量报告的人最终会出现内存异常。

0 个答案:

没有答案