我的代码分析出现 CA2000 错误,要求我在退出范围之前处理我的对象
在丢失范围之前处理对象在方法中 'MyMethod(Guid?)',来电 System.IDisposable.Dispose在对象'person'之前所有引用 它超出了范围。
我对此规则感到惊讶,因为我认为在退出示波器时会自动运行dispose。注意:A similar question已被询问并确认我的意见,不强制处置程序。
如果我不处理我的对象并且我没有在使用指令中使用它会发生什么?
答案 0 :(得分:3)
永远不会自动调用Dispose。您必须明确地调用它,或使用'using'关键字 至少,如果你不处理你的对象,它可能由垃圾收集器完成,但只有你实现了正确的patern。
答案 1 :(得分:2)
如果您已将对象包装在using
语句中,那么您可以将其翻译为。
try{
var myObject = new MyObject();
}finally{
myObject.Dispose();
}
更新
如果你没有处置你的对象,'可能永远留在内存中保留附加的资源。但可能不会。它依赖于垃圾收集器来试图清除它。但要注意GC 只能清除托管资源。
点击此处查看类似问题:What happens if I don't call Dispose on the pen object?
答案 2 :(得分:2)
我认为在退出示波器时会自动运行dispose。
不是任何范围,只有using
块范围。退出方法与退出using
块不同。
如果某个对象实现了IDisposable
,那么您应该始终手动或通过using
块进行处理。根据您的代码结构,由您决定何时执行此操作。
答案 3 :(得分:1)
当对象超出范围时,不调用Dispose。在许多场景中,当垃圾收集对象时(当实现在其中调用Finalizer和Dispose时)将调用它。