2010-03-04 4 views
1

ANTS 프로파일 러를 사용하여 응용 프로그램에서 메모리 누수를 추적하려고합니다. 가비지 컬렉터에서 가비지 수집기에 영원히 앉아있는 System.Transactions.SafeIUnknown 객체의 목록이있는 곳을 추적하여 최종 자 대기열에 있지만 결코 공개되지 않습니다..NET에서 가비지 수집기 System.Transactions.SafeIUnknown이있는 가비지 수집기

System.Transactions.SafeIUnknown에 대한 문서가 없기 때문에 어떤 것을 만들거나 참조 할 것인지 결정할 수 없으며 의도적 인 부분이 아닙니다.

나는이 문제에 대해 어느 정도 알고있는 사람이 있기를 바라고 있습니다. 그것은 20 바이트의 작은 유출이지만 우리의 애플 리케이션이 끝날 때 며칠 동안 실행될 때 누수가 증가하고 우리는 이러한 대기 완료의 수백만을 가지고 있으며 많은 양의 많은 메모리를 먹기 시작합니다.

누구로부터 아이디어를 얻을 수 있습니까?

후속은

내가 사용중인 특정 라이브러리에 아래로 추적했습니다. 이 특정 라이브러리를 통해 SQL 문을 실행 한 후에는 남겨진 것 같습니다. Statementment는 트랜잭션으로 래핑되지 않지만 제네릭 형식의 다소 혼란스러운 루프와 현재 스포츠 용으로 전달 된 대리자 및 더 많은 클로저로 래핑 될 수있는 클로저로 이중 트립 간접 지정과 같이 보이는 것을 통해 실행됩니다. 계속 정확하게 연결하려고합니다. 첫 번째 호출 포트는 비슷한 메커니즘을 사용하여 다시 생성 할 수 있는지 확인하려고 시도하는 것입니다.

답변

1

SafeIUnknown은 System.Transactions의 몇 가지 메서드에서 비롯되었으며 그 중 하나는 TransactionScope 생성자 및 Dispose 메서드입니다. 이러한 호출은 JitSafeGetContextTransaction이라는 Transaction 클래스의 내부 메서드에서 호출되어 SafeIUnknown의 인스턴스를 반환하는 네이티브 Ole32 함수 CoGetDefaultContext을 추가로 호출합니다.

이 질문은 해당 개체가 트랜잭션 컨텍스트의 내부 표현과 관련되어 있음을 나타냅니다.

트랜잭션 또는 트랜잭션 범위를 적절히 해제하지 않았습니까? 그렇다면 사용중인 데이터 제공 업체에 문제가있을 수 있습니까?

+0

의견을 보내 주셔서 감사합니다. 이전 의견에서 언급 한 바와 같이 조사를 계속하고 내가 어디로 갈 수 있는지 보도록하겠습니다. – Bigtoe

+0

그건 그렇고 MS SQL 데이터 제공자예요. – Bigtoe

4

SafeIUnknown은 SafeHandle에서 파생되었습니다. 이것이 종결자를 구현하는 클래스입니다. 특수한 경우 최종 결정 코드가 핵심 실행 영역 (CER)에서 실행됩니다. 이러한 종류의 코드는 실행 보증을 제공하지만 예외는 표시되지 않습니다. finalizer는 SafeIUnknown.ReleaseHandle()을 실행하고, Marshal.Release()를 호출하여 SafeIUnknown이 래핑 한 COM 인터페이스 포인터를 해제합니다.

마무리 대기열에있는 많은 래퍼를 보면 Marshal.Release() 호출이 예외를 throw하고 있음을 나타냅니다. 래퍼가 마무리되는 것을 방지합니다. 왜 그것이 예외를 던지고 있는지 정확히 알아내는 것은 까다로울 것입니다. 이것은 관리되지 않는 코드 폭탄입니다. 이유를 찾을 수있는 힌트가별로 없습니다. 95 %의 경우는 힙 손상이며 문제를 해결하는 것은 매우 어려운 문제입니다. 무엇보다도이 코드는 귀하의 코드가 아니며 소스가 없기 때문입니다.

첫 번째 예외에서 좋은 비 관리 코드 디버거 (예 : WinDbug)에서 중단 점을 가져올 수 있어야합니다. 디버깅 기호를 얻는 것은 스택 추적을 이해하는 데 필수적입니다. 그것은 아마 그러나 거기에서 아직도 긴 발사 일 것이다. Microsoft 지원 부서에 도움을 요청하십시오. 또는 기계를 재건하는 것과 같은 과감한 무언가. 행운을 빌어 요!

+0

의견을 보내 주셔서 감사합니다. 수사를 계속하고 내가 어디로 갈 수 있는지 알아 봅니다. – Bigtoe

관련 문제