Estamos utilizando EWS Managed API que sondea MS Exchange para nuevos mensajes de correo después de un intervalo determinado. Con cada invocación de la llamada de sondeo (PullSubscription.GetEvents()
), la API de Microsoft está fallando al eliminar correctamente el NetworkStream
y hace que la memoria aumente proporcionalmente. Esto fue anteriormente discussed here, pero nunca se resolvió. Utilizando ANTS Profiler pudimos determinar qué objetos crecían continuamente en la memoria y aislar el problema.¿Cómo forzar la recolección de basura del objeto que no puede desreferenciar?
Ahora que se ha aislado el problema, ¿hay alguna manera de deshacerse de un NetworkStream creado en una API externa al que no tenemos referencia? GC.Collect() no parece disponer de él ya que todavía tiene una referencia activa. ¿Qué podemos hacer para limpiar la referencia colgante? ¿Hay algún contenedor que podamos usar para forzar la limpieza de su buggy SDK?
Me pregunto: ¿puede obtener la referencia a través de la reflexión? –
¿Puede publicar dónde encontró el NetworkStream huérfano en la biblioteca? Acabo de hurgar en GetEventsMethod, pero no encontré un NetworkStream. –
@HenningKrause También intenté con el enfoque de Daren Thomas, pero para reflejarlo necesitaría una investigación más profunda sobre las partes internas de la clase ExchangeService y SubscriptionBase que elegí omitir. Actualmente seguí el # 1 de Salvatore por ahora y abrí un boleto con MS. Veremos qué sucede después ... – SliverNinja