내 프로젝트는 우리 서버에서 몇 가지 프로세스를 시작하기 위해 C#으로 작은 Windows 서비스를 작성했습니다. 새 서비스는 MSSQLSERVER 서비스에 종속되며 사용자 세션 내에서 작동 할 때 안정적으로 시작/실행/중지됩니다.Try/Catch에서 ExecuteReader를 포함하면 성공하게됩니까?
부팅시에는 제한된 성능의 하드웨어가 매우 사용량이 많아서 MSSQLSERVER가 서비스 제어 관리자에게 '시작됨'으로보고했지만 쿼리를 처리 할 준비가되지 않은 것 같습니다. 따라서 SQLConnection을 열면 "가끔"(약 50/50)을 쿼리하는 첫 번째 시도가 실패합니다.
rdr = cmd.ExecuteReader();
을하고 1 초 지연과 시도/캐치에 배치하고 최대 다시 시도하자
내이 문제를 해결하는 (일반적으로 인정 하듯이 무딘) 접근 방식은 내가 실패 믿고 ExecuteReader 메서드을하는 것이 었습니다 10 번 :이 방법은 완벽하게 작동하고 모든 시간을 시작하도록 서비스를 할 수 있지만 내가 이벤트 로그를 확인하면
bool bReady = false;
int iErrCount = 0;
while (bReady == false && iErrCount < 10)
{
try
{
System.Threading.Thread.Sleep(1000);
rdr = cmd.ExecuteReader();
bReady = true;
EventLog.WriteEntry("Starting...",EventLogEntryType.Information);
}
catch
{
bReady = false;
iErrCount += 1;
EventLog.WriteEntry("Failed once...",EventLogEntryType.Warning);
}
}
if (bReady == false)
{
EventLog.WriteEntry("Failed ten times. Service will now exit.",EventLogEntryType.Error);
return;
}
내 quandry는, 실제로는 항상 첫 번째 시도에서 성공한다! 지금 잡으려고하는 예외는 결코 발생하지 않습니다. Try/Catch 내부에서 메서드 호출을 배치하는 방법은 성공 가능성에 영향을 미쳤습니다.
모든 의견을 환영합니다.
문제가 무엇인지 알아 내고 문제를 해결하는 방법은 무엇입니까? try {executeReader();} catch (Exception ex) {EventLog.WriteEntry (ex.ToString());}'? –
"실패"하면 어떤 예외가 있습니까? –
그냥 짐작할 만하지 만 그 이유는 .NET의 성능 최적화 일 수 있습니다. 여기를 참고하십시오 : [http://msmvps.com/blogs/peterritchie/archive/2007/06/22/performance-implications-of-try-catch-finally. aspx] (http://msmvps.com/blogs/peterritchie/archive/2007/06/22/performance-implications-of-try-catch-finally.aspx) – Ondra