【问题标题】:How to release memory when OpenFileDialog?OpenFileDialog时如何释放内存?
【发布时间】:2012-07-29 11:14:08
【问题描述】:

Winform OpenFileDialog,每次打开,内存都会增加,dispose()和OpenFileDialog=null都不行,内存不会丢失。 .

如何解决这个问题??

   private void btnLocalPicture_Click(object sender, EventArgs e)
    {
        OpenFileDialog ofdSelectPicture = new OpenFileDialog();
        ofdSelectPicture.Filter = "PicFile|*.jpg;*.png;*.jpeg;*.gif;*.bmp;*.tif";
        if (ofdSelectPicture.ShowDialog() == DialogResult.OK)
        {
            if (showPicture != null)
                showPicture.Dispose();
            showPicture = Image.FromFile(ofdSelectPicture.FileName);
            if (pbShowPicture.Image != null)
                pbShowPicture.Image.Dispose();
            pbShowPicture.Image = showPicture;
            path = ofdSelectPicture.FileName;
            WordTip.Visible = false;
            if (pbShowPicture.Image != null)
                picOK.Enabled = true;
        }
        ofdSelectPicture.Dispose(); //not working
        ofdSelectPicture = null;  //not working
        GC.Collect();
    }

【问题讨论】:

  • 你是如何测量内存消耗的?因为 gc 不是确定性的,也不一定会将内存释放回操作系统,所以只有内存分析器才能让您真实了解持有内存分配的引用是否仍然是根目录。
  • 这取决于你是否发现了内存泄漏,或者这是否是 gc 的正常操作。在决定是否真的有问题之前,您需要进行有效的测量。你怎么测???当然,有问题的内存量可以忽略不计吗?您打算打开多少个文件对话框?
  • 你不应该(必须)调用 GC.Collect()。
  • 如果打开文件对话框导致加载额外的dll,那么在卸载appdomain之前不会释放这块内存
  • 你确定这不是你看到的Image 的内存吗?每次打开新图片时,内存消耗都会无限增加吗?还是仅在第一张图片之后?

标签: c# openfiledialog


【解决方案1】:

您可以通过“项目+属性”的“调试”选项卡查看发生了什么情况,勾选“启用非托管调试”选项。启动您的程序并选择输出窗口。显示对话框。

您现在将看到加载到您的进程中的 DLL 列表。这些是在您的机器上注册的 shell 扩展。你会得到什么是不可预测的,每个人都有自己喜欢的扩展集。程序员往往有很多。

是的,这些扩展会在您的进程中消耗内存。只是因为这些 DLL 占用了您的虚拟内存地址空间中的空间。还因为这些 DLL 分配内存供自己使用。写得不好肯定会泄漏内存。请注意,这些扩展分配的内存始终是非托管内存,因此请确保您有一个可以显示泄漏的好工具。像 TaskMgr.exe 这样的东西还不够好。

你可以做两件基本的事情。首先是忽略它,这个问题是特定于你的机器的,你的用户不会有同样的问题。您无法修复泄漏,您没有扩展的源代码。或者,您可以使用 SysInternals 的 AutoRuns 实用程序追查麻烦制造者。它向您显示注册了哪些 shell 扩展,并允许您通过单击复选框来取消注册它们。

【讨论】:

  • 所以没有办法解决这个问题?我的老板让我解决这个问题......,这让我很困扰......
  • 有什么办法可以用OpenFileDialog代替VS
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 2013-10-10
  • 2016-06-22
  • 1970-01-01
  • 2020-09-10
相关资源
最近更新 更多