2011-11-29 3 views
0

이 VB.NET 코드를 실행하여 WAV 파일을 mp3로 변환합니다. 일반적으로 1 시간에 약 20 회 실행됩니다. 임의로 약 하루에 한 번, objMP3 = CreateObject("AudioConverter.AudioConverterx")에 앱 풀이 있습니다. 앱 풀을 다시 시작하면 수정됩니다.CreateObject로 인해 응용 프로그램 풀이 중지됨

'convert the file 
objMP3 = CreateObject("AudioConverter.AudioConverterx") 
objMP3.Logfile = myLogFileName 
objMP3.Convert(myWAVfile, myMP3file, "-cMP3") 
objMP3 = Nothing 

이런 일이 발생 때마다, 이벤트 로그이 오류가 있습니다

Faulting application w3wp.exe, version 6.0.3790.3959, stamp 45d6968e, faulting module audioconverter.dll, version 0.0.0.0, stamp 2a425e19, debug? 0, fault address 0x0000402e.

및 시스템 로그이 있습니다

A process serving application pool 'tts.servername.com' exceeded time limits during shut down. The process id was '1340'.

내가 생각할 수있는 유일한 것은이 때문이다 응용 프로그램이 제대로 닫히지 않았습니다. objMP3 = Nothing 실제로 그것을 닫지 않는다 (또는 고전적인 VB에서와 동일하게 작동하지 않습니다) 읽었습니다.

또한 서버에 디버그 진단을 설정했습니다. 정지가 발생하면 큰 파일 (> 8GB)이 초당 여러 번이 행과 함께 작성됩니다.

[11/8/2011 9:28:36 PM] First chance exception - 0xc0000005 caused by thread with System ID: 2548

어떤 아이디어?

+0

그 COM 서버가 단순히 액세스 위반이 충돌 :

은 내가 사용하는 코드입니다. 네이티브 코드에 대한 표준 표준 오류 모드. 당신은 그것을 디버그하거나 도랑을해야합니다. –

답변

0

.NET에서 COM 개체를 올바르게 릴리스하고 종료자를 실행하려면 Marshall.ReleaseComObject을 호출해야합니다.

'convert the file 
    objMP3 = CreateObject("AudioConverter.AudioConverterx") 
    ' Do stuff 
    ReleaseComObject(objMP3) 

    private void ReleaseComObject(object o) 
    { 
     try 
     { 
      if (o != null) 
      { 
       // As per the documentation, call ReleaseComObject in a loop 
       // until all references are released. 
       while (System.Runtime.InteropServices.Marshal.ReleaseComObject(o) > 0) 
       { 
       } 
      } 

      o = null; 
     } 
     catch (System.Runtime.InteropServices.COMException) 
     { 
      // Do nothing. We don't want exceptions to leak out of this method. 
     } 
    } 
관련 문제