2011-10-21 3 views
1

Est-ce que quelqu'un d'autre a découvert un problème de fuite de mémoire avec Pull Abonnements (ExchangeService.SubscribeToPullNotifications()) dans Exchange Managed Web Services API? Lors de l'appel PullSubscription.GetEvents() l'utilisation de la mémoire grimpe 4K avec presque tous les appels d'appel. La seule façon dont j'ai pu réduire l'utilisation de la mémoire est en forçant la récupération de place (via GC.Collect()) après chaque appel - un chemin inutile.EWS Managed API 1.1 - Abandon des abonnements de mémoire

Je suis surpris de voir que l'API n'a pas changé depuis près d'un an.

+0

Continuez à faire le GC.Collect() - c'est OK car l'appel de l'API Exchange masque l'heure utilisée par le garbage collector. Il est tout à fait possible que vous ayez une fuite dans votre code. – mozillanerd

+0

J'ai exclu la fuite de code en créant une application console simple qui ne crée qu'un seul abonnement et l'interroge dans un 'while (true)' après 5 secondes de retard. Cependant, la mémoire continue de grimper (surtout lorsque vous avez plusieurs abonnements). – SliverNinja

Répondre

1

Ce problème a été résolu par another post. Essentiellement EWS était en conflit avec un autre composant qui n'a pas réussi à sortir un NetworkStream (en raison d'un SqlException). ANTS memory profiler a été utilisé pour identifier la cause et le calendrier du problème. Sans cet outil de profilage, nous n'aurions jamais découvert le problème.

0

Je dirais que si un GC.Collect récupère la mémoire, il n'y a pas de fuite de mémoire. Il n'y a tout simplement pas de pression sur le GC pour effectuer une collecte GC, puisque suffisamment de mémoire est disponible.

Questions connexes