Sli*_*SFT 9 c# garbage-collection exchangewebservices ews-managed-api
我们正在使用EWS托管API,它会在给定间隔后轮询MS Exchange以获取新邮件.每次调用轮询调用(PullSubscription.GetEvents()) - Microsofts API都无法正确处理NetworkStream并导致内存按比例增加.这在此之前已经讨论过,但从未解决过.使用ANTS Profiler,我们能够确定哪些对象在内存中不断增长并隔离问题.
既然问题已被隔离 - 有没有办法处理在我们没有引用的外部API中创建的NetworkStream?GC.Collect()似乎没有处置它,因为它仍然有一个活动的引用.我们可以做些什么来清理悬空参考?我们可以使用一些包装来强制清除他们的错误SDK吗?
无法强制GC释放引用对象的内存!
首先,我建议联系microsoft本身以获取有关此bug的帮助.
第二,你在谈论"处置"还是只是释放记忆?它们是两个完全不同的东西.(IDisposable模式,终结者).
第三,你可以解引用引用这些对象的对象吗?
第四,一种可能的解决方案是使用反射器反编译为您提供问题的代码,了解一种可以到达保留引用对象的字段的方法,在代码中使用反射来访问私有字段并将它们放入空值.是一个非常肮脏的黑客,但如果你没有别的办法是我唯一能想到的.只有在你不能以任何其他方式进行时才这样做.