0

1 시간마다 실행되는 Windows 서비스에 로그인하고 싶습니다. 내 Windows 서비스 내에 Parallel.ForEach을 사용하고 있습니다. AdoNetAppender를 사용하여 SQL Server 데이터베이스에 로그인합니다.Windows 서비스의 Log4net 및 작업 병렬 라이브러리

ILog _log = LogManager.GetLogger(typeof(EmailJob)); 

위의 줄은 정적 인스턴스를 사용하여 데이터베이스에 로그인하는 것입니다. 그렇습니까? AdoNetAppender에서 어떻게 연결이 유지됩니까? 내 Windows 서비스가 첫 번째 반복을 완료하고 AdoNetAppender 연결 상태가 어떻게됩니까? 한 번에 가깝거나 가비지 컬렉터가 처리하기를 기다리고 있습니까? 다음 반복이 시작되면 새 연결이 열리게됩니까?

가비지 수집기가 개체를 처리하는 데 오랜 시간이 걸리면 Windows 서비스가 항상 실행되므로 열려있는 연결 수는 SQL Server의 최대 연결 제한을 초과합니다. 반복이 끝나면 연결을 닫고 반복이 시작되면 연결을 열어야합니다. 무엇을해야합니까?

+0

여기에 게시하기위한 좋은 팁은 긴급 할 수도 있지만 다른 누구에게도 급한 것이 아니라는 것입니다. [이 커뮤니티 토론] (http://meta.stackoverflow.com/q/326569/472495)을 읽어보십시오. – halfer

답변

1

샘플의 코드 줄은 정적 로그 변수가 아니므로 GC가 변수를 수집하는 방법이 궁금합니다. 객체에 대한 참조가 더 이상없는 경우에만 수행됩니다. 게다가 AdoNetAppender의 내부 작업에 대한 많은 가정을합니다. 연결은 AdoNetAppender에서 유지 관리되지만 버퍼를 사용하며 버퍼가 가득 차면 씁니다. 연결 관리는 연결 문자열에서 참조하는 드라이버에 의해 수행됩니다. 열려 있거나 닫혀 있는지 걱정할 필요가 없습니다. 일반적으로 로거에 의한 구체적인 문제가있을 때만이 문제에 대해 걱정해야합니다. 로거를 가리키며 어떤 증상이 나타나면 문제가 발생합니까?

관련 문제