2011-09-21 7 views
2

우리 데스크톱 응용 프로그램 (C#)에서 save/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

입니다 쉘 대화 상자를 열 때. 모든 셸 확장 처리기가 컴퓨터에 설치되어 있습니다. 코드를 작성하지 않았습니다. 프로젝트 + 속성, 디버그 탭에서 "관리되지 않는 코드 디버깅 사용"옵션을 선택하면 출력 창에로드 된 것을 볼 수 있습니다.

이러한 셸 확장 처리기를 잘못 사용하면 리소스가 누출되는 것은 드문 일이 아닙니다. SysInternals의 자동 실행 유틸리티를 사용하여 해당 기능을 해제 할 수 있습니다. Microsoft가 작성하지 않은 것들로 시작하십시오.