2011-09-30 3 views
4

알려진 문제가있는 프로젝트에 들어갑니다. 응용 프로그램이 GC.WaitForPendingFinalizers로 전화를 걸면 중단됩니다. 명백한 솔루션 해결 방법은 WaitForPendingFinalizers 호출을 제거하는 것이지만 불행히도 이것은 타사 어셈블리에서 수행되므로 제거가 옵션이 아닙니다.Final Finalizer 소스 확인 중

대신 문제의 근원을 찾고 차단자가 누가 차단하는지 확인하고 싶습니다. 그러나 코드베이스는 크고 막 들어 오기 때문에 친숙하지 않기 때문에 어디 까지나 직감이나 직감이 전혀 없습니다. 이것은 도구를 사용하여 찾을 필요가 있음을 의미합니다.

그래서 제 질문은 다음과 같습니다

  1. 는 종료 자 큐를 반복하는 프레임 워크/EE 스레드 Studio에서보기 스레드에 표시됩니까? 이것에 대한 스택 추적은 우리가 걸려있는 곳을 찾기 위해 먼 길을 갈 것입니다.
  2. 파이널 라이저와 그 뿌리가 보류중인 도구를 보여줄 수 있습니까? (CF 프로젝트입니다 만,이 도구를 찾기 위해 다양한 경로를 이용할 의향이 있습니까?)
  3. 누구나 공유하고 싶은 생각이나 경험이 있으면 도움이 될 것입니다.

답변

1

VS (VS 11)에서 잠깐 살펴 봤는데 끊을 때 "GC Finalizer Thread"라는 스레드를 볼 수 있으며 내 소멸자에서 Sleep()을 수행하는 것을 발견했습니다.

하지만 CF에 대한 언급은 완전히 다른 볼 게임으로 만들 수 있습니다.

+0

"GC Finalizer Thrad"는 아니지만, 전체 프레임 워크 아래에 존재한다고해서 적어도 코드베이스의 CF-> 데스크탑 포트에 대한 도전을 들게 할 것입니다 (인터페이스가 잘 연결되기를 바랍니다). – ctacke

+1

그냥 생각이지만 어딘가에 dtor를 삽입하고 중단 점을 넣으면 어떨까요? 그 스레드에서 휴식해야합니다. –

+0

나는 내가 시도 할 것이라고 확신하는 좋은 생각이다. 감사. – ctacke

1

이것은 Windbg이 친구 인 경우 중 하나 일 수 있습니다. Tess의 블로그를 한번보십시오. 파이널 라이저 문제를! finalizequeue 디버거 명령으로 디버깅하는 방법에 대한 기사가 있습니다. http://blogs.msdn.com/b/tess/archive/2007/10/19/net-finalizer-memory-leak-debugging-with-sos-dll-in-visual-studio.aspx

(이전에 windbg 및 sos.dll로 한 번도 해 본 적이없는 경우 Tess의 블로그에서 더 많은 내용을 읽으십시오.) 매우 친숙한 몇 가지 기사가 있습니다.

관련 문제