最新评论
Jonny Yu 2009-02-24 22:33
--引用--------------------------------------------------
我的地盘我做主: 释放托管资源
感谢这位朋友指出的问题,确实像你所说的那样,如果这个类包含的字段在实现了IDispose的方法里面,对非托管资源进行了释放,如果吧_filed.Dispose(true)放在这里就是不合适的.应该把它放在清理非托管资源的区域.
那释放托管资源的地方应该写什么呢,我想这可能根据自己的代码逻辑来决定这里到底写些什么东西,比如在构造函数里面对事件进行了+=处理,那么在对应的这里就可以写事件的-=处理.
我是这样理解的,如果你觉得我的理解还是存在问题的话,希望阁下可以指点一二
再次感谢
--------------------------------------------------------
我怎么觉得就是应该放在if block里面呢. 因为GC在执行Finalizer的时候次序是随机的,所以很有可能等到你这个对象的Finalizer被执行的时候, 其引用的对象早已被Finalize掉了,这样再次finalize可能会引起异常,当然异常发上在GC thread上,可能觉察不到.
我的地盘我做主 2009-02-24 21:59
释放托管资源
感谢这位朋友指出的问题,确实像你所说的那样,如果这个类包含的字段在实现了IDispose的方法里面,对非托管资源进行了释放,如果吧_filed.Dispose(true)放在这里就是不合适的.应该把它放在清理非托管资源的区域.
那释放托管资源的地方应该写什么呢,我想这可能根据自己的代码逻辑来决定这里到底写些什么东西,比如在构造函数里面对事件进行了+=处理,那么在对应的这里就可以写事件的-=处理.
我是这样理解的,如果你觉得我的理解还是存在问题的话,希望阁下可以指点一二
再次感谢
感谢这位朋友指出的问题,确实像你所说的那样,如果这个类包含的字段在实现了IDispose的方法里面,对非托管资源进行了释放,如果吧_filed.Dispose(true)放在这里就是不合适的.应该把它放在清理非托管资源的区域.
那释放托管资源的地方应该写什么呢,我想这可能根据自己的代码逻辑来决定这里到底写些什么东西,比如在构造函数里面对事件进行了+=处理,那么在对应的这里就可以写事件的-=处理.
我是这样理解的,如果你觉得我的理解还是存在问题的话,希望阁下可以指点一二
再次感谢
释放托管资源 2009-02-24 19:03
--引用--------------------------------------------------
我的地盘我做主: 如果这个类含有的字段实现了IDispose接口,我们可以在这个地方调用这个字段的Dispose()方法
if(isDisposing)
{
_filed.Dispose();
}
--------------------------------------------------------
那Finalize调用时,对象里面非托管对象不就没办法释放?
我的地盘我做主: 如果这个类含有的字段实现了IDispose接口,我们可以在这个地方调用这个字段的Dispose()方法
if(isDisposing)
{
_filed.Dispose();
}
--------------------------------------------------------
那Finalize调用时,对象里面非托管对象不就没办法释放?
我的地盘我做主 2009-02-24 17:44
如果这个类含有的字段实现了IDispose接口,我们可以在这个地方调用这个字段的Dispose()方法
if(isDisposing)
{
_filed.Dispose();
}
if(isDisposing)
{
_filed.Dispose();
}
