Używamy EWS Managed API, który odpytuje MS Exchange dla nowych wiadomości e-mail po upływie określonego czasu. Przy każdym wywołaniu wywołania odpytywania (PullSubscription.GetEvents()
) - interfejs API firmy Microsoft nie może prawidłowo usunąć wartości NetworkStream
i powoduje proporcjonalne zwiększenie pamięci. To było wcześniej discussed here, ale nigdy nie rozwiązane. Za pomocą ANTS Profiler byliśmy w stanie określić, które obiekty stale rosną w pamięci i izolować problem.Jak wymusić wyrzucenie śmieci z obiektu, którego nie można usunąć?
Teraz, gdy problem został wyizolowany - czy istnieje sposób na pozbycie się obiektu NetworkStream utworzonego w zewnętrznym interfejsie API, do którego nie mamy odniesienia? GC.Collect() nie wydaje się go usuwać, ponieważ wciąż ma aktywne odniesienie. Co możemy zrobić, aby oczyścić zwisające referencje? Czy istnieje jakieś opakowanie, którego możemy użyć do wymuszenia czyszczenia ich wadliwego zestawu SDK?
Zastanawiam się - czy można uzyskać referencję za pomocą odbicia? –
Czy możesz napisać, gdzie znalazłeś osieroconego NetworkStream w bibliotece? Właśnie grałem w GetEventsMethod, ale nie znalazłem NetworkStream. –
@HenningKrause Podałem również podejście Darena Thomasa, ale jego odbicie wymagałoby głębszego zbadania wewnętrznych cech klas ExchangeService i SubscriptionBase, które zdecydowałem się pominąć. Obecnie podążałem za numerem 1 Salvatore i otworzyłem bilet ze stwardnieniem rozsianym. Zobaczymy, co będzie dalej ... – SliverNinja