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

本文关键字:对话框 保存文件 泄漏 资源 | 更新日期: 2023-09-27 18:09:08

我们在桌面应用程序(c#)中使用save/opn文件对话框。当我们第一次打开对话框时,句柄增加100。关闭对话框后,句柄不会减少。从下一次开始,手柄将增加10左右,减少2到4。

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

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

请给出建议

Thanks in advance

代码:代码是

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

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

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

这些shell扩展处理程序行为不当并泄漏资源当然并不罕见。你可以使用SysInternals的AutoRuns工具来禁用它们。