gpt4 book ai didi

c# - 如何强制对不能取消引用的对象进行垃圾回收?

转载 作者:太空狗 更新时间:2023-10-29 17:54:04 29 4
gpt4 key购买 nike

我们正在使用 EWS Managed API,它会在给定时间间隔后轮询 MS Exchange 以获取新邮件。每次调用轮询调用 (PullSubscription.GetEvents()) - Microsoft 的 API 无法正确处理 NetworkStream 并导致内存按比例增加。这以前是 discussed here ,但一直没有解决。使用 ANTS Profiler,我们能够确定哪些对象在内存中不断增长并隔离问题。

既然问题已被隔离 - 是否有办法处理在我们没有引用的外部 API 中创建的 NetworkStream? GC.Collect() 似乎没有处理它,因为它仍然有一个事件引用。我们可以做些什么来清理悬挂引用?我们可以使用一些包装器来强制清理他们有问题的 SDK 吗?

最佳答案

无法强制 GC 释放引用对象的内存!

首先,我建议联系微软本身寻求有关此错误的帮助。

其次,你说的是“处置”还是内存释放?它们是两种完全不同的东西。 (IDisposable 模式,终结器)。

第三,你可以取消引用引用这些对象的对象吗?

第四,一个可能的解决方案是使用反射器反编译给您带来问题的代码,了解您可以到达保留引用对象的字段的方法,在您的代码中使用反射来访问私有(private)字段和将它们置为空。是一个非常肮脏的黑客,但如果你没有其他办法是我唯一能想到的。仅当您无法以任何其他方式进行时才这样做。

关于c# - 如何强制对不能取消引用的对象进行垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7891283/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com