【问题标题】:Will using form.hide many times cause problems with memory, etc多次使用 form.hide 会导致内存等问题
【发布时间】:2013-09-22 09:16:46
【问题描述】:

我有一个 Windows 窗体,它在软件应用程序中用作图片查看器。用户选择一些东西并点击一个提示表单的工具。当他们选择另一个项目来查看另一个图像时,会显示另一个表单窗口,我使用以下内容隐藏以前的表单。

我的问题是这会导致内存问题还是什么?假设在用户查看会话期间可能会打开和隐藏 50 个表单。

private void ShowImageViewer()
{
    FormCollection fc = Application.OpenForms;
    foreach (Form frm in fc)
    {
        if (frm.Visible)
        {
            frm.Hide();
        }
    }
    ImageViewer viewer = new ImageViewer(this, parcelID);
    viewer.Show();
    viewer.Focus();   
}

【问题讨论】:

  • 如果用户选择图像 A,然后选择图像 B,然后再次选择图像 A,是创建了三个表单还是只创建了两个?换句话说,每次选择图像时都会创建一个新表单吗?我问,因为这将决定你是否应该.Hide().Close() 表格。
  • 自己试试看。您最终会再次显示其他表单,还是创建表单然后在它们永远不会再次显示时隐藏它们?如果它们真的“完成”了,只需关闭它们。
  • 为什么不简单的替换同格式的图片呢?每次创建一个新形式的实例,你的内存消耗都会增加。

标签: c# winforms visual-studio-2010 .net-4.0


【解决方案1】:

对您的问题的简短回答是,是的,这会导致内存问题,因为您不会通过在表单上调用.Hide() 来释放分配给表单的内存。

真正的问题是为用户选择的每个图像创建一个新表单。您最终会遇到内存问题,因为根据用户使用系统的方式,您可能会有数百个或更多表单。

当用户选择新图像时在表单上调用.Close() 或重新使用相同的表单并更新ImageViewer 对象中显示的图像。

【讨论】:

    猜你喜欢
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多