2014-11-13 3 views
2

백엔드에 SQL Server가있는 클라이언트 - 서버 응용 프로그램이 있습니다.스레드가 가비지 수집에 의해 차단되었는지 확인하는 방법

자원 집약적 인 작업을 수행하고 있습니다 (완료하는 데 약 30 시간이 소요됩니다). 사용자에게 세션 3 분이 주어집니다. 2 분마다 세션을 갱신하는 별도의 스레드가 있습니다.

가비지 수집기가 스레드를 활성화하고 차단하기 때문에 잠시 동안 스레드가 일시 중지됩니다. 이 때문에 스레드가 깨어나는 시간까지 세션이 이미 만료되었으므로 작업을 완료 할 수 없습니다.

내 프로세스에 대해 워크 스테이션 동시 설정을 사용하고 있습니다.

이 문제를 해결하기위한 제안이 있으십니까?

하나의 테스트에서 필자는 작업 중에 2 분마다 콜백을 호출하도록 .NET 타이머를 설정했습니다. 그러나 점차적으로 타이머가 2 분 1 초, 2 분 2 초, 그리고 때로는 1 분 이상 지연되는 것을 볼 수 있습니다.

+1

* 가비지 수집기가 스레드를 활성화하고 차단하기 때문에 스레드가 일시 중지됨 * 프로세스의 프로파일 링으로 명세서를 백업했거나 GC가 문제가 있다고 가정합니까? 그것은 완전히 부당하게 들린다. –

+1

GC가 1 분 이상 스레드를 차단합니까? 절대 들어 본적이 없다. 그것을 낮추는 방법은 없습니까? 듀얼 1.8GHZ에서 5 천만 개의 물체를 검사하는 데 3.5 초가 걸렸습니다. 물체를 모두 청소해야한다면 2 초 걸립니다. 얼마나 많은 객체를 할당합니까? GC 때문이라고 확신합니까? – LyingOnTheSky

+1

GC가 1 분 동안 스레드를 차단하는 이유가되어서는 안됩니다. 그건 상상할 수 없습니다 .. 일반적으로 CPU 기아에 문제가있을 가능성이 있습니다. –

답변

관련 문제