2011-09-21 22 views
2

我们正在我们的桌面应用程序(C#)中使用保存/ opn文件对话框。 当我们第一次打开对话框时,手柄增加了100.关闭对话框后手柄没有变小。从下次开始,手柄增加了10个左右,并减少了2个到4.如何防止资源泄漏,同时在C#中使用打开/保存文件对话框

我们尝试通过调用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(); 
    } 
} 
+2

非常不可能真的有泄漏。显示一些旨在演示它的最小代码。不要让我们猜你的代码是什么。 –

+0

看着任务管理器是不是一个足够的方式来检测内存或资源泄漏...使用探查器,而不是 –

+2

如果经过这么多年,通用对话框有没有人有内存泄漏,我会非常惊讶直到现在发现.. – MattDavey

回答

6

大量的代码被加载到进程当你打开一个shell对话框。所有机器上安装的外壳扩展处理程序。你没有写的代码。当您在Project + Properties,Debug选项卡中勾选“启用非托管代码调试”选项时,您可以看到它们在Output窗口中加载。

有这些外壳扩展处理程序错误和泄漏资源当然并不少见。您可以使用SysInternals的AutoRuns实用程序来禁用它们。从不是由微软写的那些开始。

相关问题