c# - 在 C# 中使用打开/保存文件对话框时如何防止资源泄漏

标签 c# openfiledialog resource-leak

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

我们尝试通过调用 dispose 并将其设为空来减少句柄。 并且还尝试使用 block 。 但他们都没有解决问题。

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

请指教

提前致谢

代码: 代码是

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();
    }
}

最佳答案

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

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

关于c# - 在 C# 中使用打开/保存文件对话框时如何防止资源泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7499687/

相关文章:

c# - Web API 请求对象中的强类型和任意属性

c# - OpenFileDialog时如何释放内存?

java - eclipse 中的资源泄漏警告

windows - 什么会导致节句柄泄漏?

c# - 异步任务 <HttpResponseMessage> 获取 VS HttpResponseMessage 获取

c# - 左外连接与 Linq 扩展方法?

c# - 努力摆脱递归 Page.FindControl

windows - 打开对话框保留设置

c++ - WT 保存文件对话框窗口?