我在一个项目中工作,其中有大量对象被几个类实例化,这些类在应用程序的整个生命周期内都保留在内存中。不时抛出 OutOfMemoryExceptions 会导致大量内存泄漏。似乎在实例化对象之前超出范围之后,它们没有被垃圾收集。
我已将问题隔离为主要与附加到永不分离的长寿命对象的事件处理程序有关,从而导致长寿命对象仍然具有对超出范围对象的引用,然后将永远不会垃圾收集。
我的同事提出的解决方案如下:在所有类上实现 IDisposable,全面和在 Dispose 方法中,使您的对象中的所有引用为空,并从您附加到的所有事件中分离。
我相信这是一个非常糟糕的主意。首先是因为它“矫枉过正”,因为这个问题主要可以通过修复一些问题区域来解决,其次是因为 IDisposable 的目的是释放您的对象控制的任何非托管资源,而不是因为您不信任垃圾收集器。到目前为止,我的论点被置若罔闻。我怎样才能让他们相信这是徒劳的?