我最近调试了一些有点内存泄漏的代码.这是一个长期运行的程序,作为Windows服务运行.
如果你发现一个戴着IDisposable
界面的类,它告诉你它使用的一些资源超出了垃圾收集器为你清理的能力.
它告诉你的原因是你,这个对象的用户现在负责清理这些资源的时间.恭喜!
作为一名尽职尽责的开发人员,.Dispose()
当您完成对象以释放这些非托管资源时,您会轻松调用该方法.
完成后,有一个很好的using()
模式可以帮助清理这些资源.只是发现哪些确切的物体导致泄漏?
为了帮助追踪这些流氓非托管资源,有什么方法可以查询在任何给定时间点等待处置的对象是什么?
不应该有任何你不想调用Dispose的情况,但是编译器无法告诉你应该在哪里调用dispose.
假设您编写了一个工厂类,它创建并返回一次性对象.如果清理应该是您的呼叫者的责任,编译器是否应该因为没有调用Dispose而导致错误?