C#如何能手工释放一个托管对象?

jsayit 2013-09-24 10:59:38
例如
Object obj....
obj=null;
GC.Collect()
这样算是手工释放资源吗?

还是说我在一个类的Dispose函数里面写
member=null;

那么当我显示调用obj.Dispose的时候,GC也会自动执行去回收member?

而且,既然Dispose可以用于释放资源,那么什么情况必须依赖于析构函数(Finalize方法)呢?
谢谢。
...全文
397 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shighui 2013-09-24
  • 打赏
  • 举报
回复
是的,不用管那么多了,有得用就行了。
人生导师 2013-09-24
  • 打赏
  • 举报
回复
首先.NET中的对象内存管理由垃圾回收器来进行回收的,调用GC.Collect()可以强制垃圾回收器来进行垃圾回收,因为垃圾回收器是到到内存规定的限制时才进行垃圾回收的,并不是某个对象不可用了就立即执行垃圾回收的,不过我们可以在代码中强制调用GC.Collect()来进行垃圾回收,不过不建议这样做,因为垃圾回收过程是一个复杂的过程,会影响到程序性能,而显示调用Disopose方法是时用来释放掉托管对象指向的非托管资源,如FileStream fs =new FileStream(filepath)代码,其中fs是一个托管对象,但是它指向的是一个硬盘上的具体文件,调用fs.Dispose()方法是显示用来释放非托管资源的,然后对于析构函数的调用,我们程序员不能控制其什么时候被调用,它的调用使用垃圾回收器来进行管理的,程序这边并不知道,关于垃圾回收器的更多内容可以参考CLR via C#中的垃圾回收器章节
cheng2005 2013-09-24
  • 打赏
  • 举报
回复
托管是什么意思?就是别人来管,你管不到。
phommy 2013-09-24
  • 打赏
  • 举报
回复
前两个例子,如果obj和member没有其他引用的话,会被回收 最后一个问题回答不了
tcmakebest 2013-09-24
  • 打赏
  • 举报
回复
既然可以自动回收,那就好好享受吧,楼主这么多虑不是自寻烦恼吗,入乡随俗吧!

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧