2

我们在桌面应用程序(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();
    }
}
4

1 回答 1

6

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

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

于 2011-09-21T12:33:09.730 回答