2011-10-21 2 views
1

Exchange Managed Web Services API에 풀 구독 (ExchangeService.SubscribeToPullNotifications())을 사용하여 메모리 누수 문제를 발견 한 사람이 있습니까? PullSubscription.GetEvents()을 호출하면 메모리 사용률이 거의 모든 폴링 호출에서 4K를 올라갑니다. 메모리 사용량을 줄이는 유일한 방법은 모든 호출 후에 불필요한 경로 인 가비지 콜렉션 (GC.Collect() 통해)을 강제 실행하는 것입니다.EWS Managed API 1.1 - 당겨 받기 구독 메모리 누수

API가 거의 1 년 동안 변경되지 않은 것을보고 놀랐습니다.

+0

GC.Collect()를 계속 수행하십시오. Exchange API 호출이 가비지 수집기에서 사용하는 시간을 마스킹하므로 Ok입니다. 그러나 코드에 누수가있을 가능성이 큽니다. – mozillanerd

+0

단일 구독 만 만들고 간단한 5 초 후에 'while (true)'로 폴링하는 간단한 콘솔 앱을 만들어 코드 유출을 배제했습니다. 그러나 메모리가 등반을 계속합니다 (특히 구독이 여러 개인 경우). – SliverNinja

답변

1

이 문제는 another post으로 해결되었습니다. 본질적으로 EWS는 NetworkStream (SqlException으로 인해)을 공개하지 못한 다른 구성 요소와 충돌했습니다. ANTS memory profiler을 사용하여 문제의 원인과시기를 정확히 나타냅니다. 이 프로파일 링 도구가 없으면 문제를 발견하지 못했을 것입니다.

0

GC.Collect가 메모리를 회수하면 메모리 누수가 없다고 말합니다. 충분한 메모리를 사용할 수 있기 때문에 GC 수집을 수행하는 GC에 대한 압력이 없습니다.