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

C# 在c中使用打开/保存文件对话框时如何防止资源泄漏#,c#,openfiledialog,resource-leak,C#,Openfiledialog,Resource Leak,我们正在桌面应用程序(C#)中使用save/opn file对话框。 当我们第一次打开对话框时,句柄增加了100。关闭对话框后,句柄不会减少。从下一次开始,控制柄将增加10个左右,并减少2到4个 我们试图通过调用dispose并将其设置为null来减少句柄。 还尝试了使用block。 但他们都没有解决这个问题 你能告诉我这方面的工作吗?或者我们可以使用任何自定义控件等等 请对此提出建议 提前谢谢 代码: 代码是 SaveFileDialog objSaveDialog = new SaveFil

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

我们试图通过调用dispose并将其设置为null来减少句柄。 还尝试了使用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();
    }
}
SaveFileDialog objsavedilog=new SaveFileDialog();
尝试
{
objsavedilog.Filter=“txt文件(*.txt)|*.txt|所有文件(*.*)|*.”;
objsavedilog.Title=“保存到文本文件”;
//ShowDialog();
DialogResult dlgResult=objSaveDialog.ShowDialog();
Dispose();
if(dlgResult==DialogResult.OK)
{
字符串strSaveFilePath=objsavedilog.FileName;
如果(!string.IsNullOrEmpty(strSaveFilePath))
{
TextWriter myTxtWriter=新的StreamWriter(strSaveFilePath,false);
对于(int-index=0;index<10000;index++)
{
myTxtWriter.WriteLine(“示例文本”);
}
mytxtwitter.Flush();
mytxtwitter.Close();
mytxtwitter.Dispose();
}
}
}
最后
{
如果(objSaveDialog!=null)
{
objsavedilog=null;
//((IDisposable)objsavedilog.Dispose();
}
}

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


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

很可能真的有漏洞。显示一些旨在演示它的最小代码。不要让我们猜你的代码是什么。查看任务管理器并不是检测内存或资源泄漏的充分方法。。。改用探查器如果这么多年后,公共对话框出现了迄今为止没有人发现的内存泄漏,我会非常惊讶。如果执行完整的GC(例如,
GC.Collect();GC.WaitForPendingFinalizers();
),句柄会被回收吗?在调用终结器之前,可能有某些内容一直保留在句柄上;GC.WaitForPendingFinalizers()。但手柄仍然保持不变。你能告诉我吗