우리는 주어진 간격 후에 새로운 메일 메시지를 MS Exchange를 폴링하는 EWS Managed API를 사용하고 있습니다. 폴링 호출 (PullSubscription.GetEvents()
)을 호출 할 때마다 - Microsoft API는 NetworkStream
을 적절히 처리하지 못하여 비례하여 메모리가 증가합니다. 이전에 discussed here 이었지만 해결되지 않았습니다. ANTS Profiler를 사용하여 어떤 객체가 메모리에서 지속적으로 증가하는지 확인하고 문제를 격리 할 수있었습니다.참조 할 수없는 개체의 가비지 수집을 강제로 수행하는 방법?
이제 문제가 격리되었습니다. 참조가없는 외부 API에서 생성 된 NetworkStream을 처리 할 수있는 방법이 있습니까? GC.Collect()는 여전히 활성 참조가 있으므로이를 처리하지 않는 것처럼 보입니다. 매달린 참조를 정리하기 위해 우리는 무엇을 할 수 있습니까? 버그가있는 SDK를 강제로 정리하는 데 사용할 수있는 래퍼가 있습니까?
나는 반사를 통해 참조를 얻을 수 있습니까? –
라이브러리에서 분리 된 NetworkStream을 발견 한 곳에 게시 할 수 있습니까? GetEventsMethod를 찔러 보았지만 NetworkStream을 찾지 못했습니다. –
@HenningKrause 또한 Daren Thomas의 접근 방식을 시도해 봤지만 건너 뛰기로 선택한 ExchangeService 및 SubscriptionBase 클래스의 내부에 대한 더 깊은 조사가 필요했습니다. 현재 Salvatore의 # 1을 따라 왔으며 MS와 함께 티켓을 열었습니다. 우리는 다음에 일어날 일을 볼 것입니다 ... – SliverNinja