我们在桌面应用程序 (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/