【问题标题】:How to prevent resource leaks while using Open/Save file dialog in c#如何在 c# 中使用打开/保存文件对话框时防止资源泄漏
【发布时间】:2012-01-05 19:08:51
【问题描述】:

我们在桌面应用程序 (C#) 中使用保存/opn 文件对话框。 当我们第一次打开对话框时,句柄增加了 100。关闭对话框后,句柄并没有减少。从下一次开始,句柄增加了 10 左右,减少了 2 到 4。

我们尝试通过调用 dispose 并将其设为 null 来减少句柄。 并尝试使用块。 但是他们都没有解决这个问题。

您能告诉我任何解决此问题的方法吗?或者我们可以使用任何自定义控件等等

请对此提出建议

提前致谢

代码: 代码是

SaveFileDialog objSaveDialog = new SaveFileDialog();
try
{

    objSaveDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    objSaveDialog.Title = "Save to Text File";
    //objSaveDialog.ShowDialog();
    DialogResult dlgResult = objSaveDialog.ShowDialog();
    objSaveDialog.Dispose();
    if (dlgResult == DialogResult.OK)
    {
        string strSaveFilePath = objSaveDialog.FileName;

        if (!string.IsNullOrEmpty(strSaveFilePath))
        {
            TextWriter myTxtWriter = new StreamWriter(strSaveFilePath, false);
            for (int index = 0; index < 10000; index++)
            {
                myTxtWriter.WriteLine("sample text.....................................");
            }

            myTxtWriter.Flush();
            myTxtWriter.Close();
            myTxtWriter.Dispose();

        }
    }
}
finally
{
    if (objSaveDialog != null)
    {
        objSaveDialog = null;
        //((IDisposable)objSaveDialog).Dispose();
    }
}

【问题讨论】:

  • 不太可能真的存在泄漏。显示一些旨在演示它的最小代码。不要让我们猜测您的代码是什么。
  • 查看任务管理器不足以检测内存或资源泄漏...改用分析器
  • 如果这么多年过去了,如果普通对话框出现了直到现在没人发现的内存泄漏,我会感到非常惊讶..
  • 如果您执行完整的 GC(例如GC.Collect(); GC.WaitForPendingFinalizers();),那么这些句柄会被回收吗?在调用终结器之前,可能有一些东西一直在持有句柄。
  • 嗨chibacity,我尝试调用GC.Collect(); GC.WaitForPendingFinalizers(); .但手柄仍然保持不变。能否请教一下

标签: c# openfiledialog resource-leak


【解决方案1】:

当您打开 shell 对话框时,很多代码会加载到您的进程中。您机器上安装的所有 shell 扩展处理程序。不是你写的代码。当您在“项目+属性”的“调试”选项卡中勾选“启用非托管代码调试”选项时,您可以在“输出”窗口中看到它们正在加载。

让这些外壳扩展处理程序行为不端和泄漏资源当然并不少见。您可以使用 SysInternals 的 AutoRuns 实用程序来禁用它们。从非微软编写的开始。

【讨论】:

    猜你喜欢
    • 2016-03-09
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多