【发布时间】:2012-01-05 19:08:51
【问题描述】:
我们在桌面应用程序 (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();
}
}
【问题讨论】:
-
不太可能真的存在泄漏。显示一些旨在演示它的最小代码。不要让我们猜测您的代码是什么。
-
查看任务管理器不足以检测内存或资源泄漏...改用分析器
-
如果这么多年过去了,如果普通对话框出现了直到现在没人发现的内存泄漏,我会感到非常惊讶..
-
如果您执行完整的 GC(例如
GC.Collect(); GC.WaitForPendingFinalizers();),那么这些句柄会被回收吗?在调用终结器之前,可能有一些东西一直在持有句柄。 -
嗨chibacity,我尝试调用GC.Collect(); GC.WaitForPendingFinalizers(); .但手柄仍然保持不变。能否请教一下
标签: c# openfiledialog resource-leak