日期:2014-05-18  浏览次数:21116 次

关于using和System.GC.Collect()对于释放资源的讨论!
如题。。。
以最简单的释放窗体资源为例
可以通过using(){}实现资源释放
也可以在form.FormClosing的时候 通过System.GC.Collect()释放资源
可是区别在哪呢

------解决方案--------------------
using 是即时释放.
------解决方案--------------------
System.GC.Collect(),强制立即回收

using,系统会在适时的时候进行回收,不一定是立即
------解决方案--------------------
非托管资源的托管示例,有许多其他类别的非托管资源和封装这些资源的类库类型。所有这些类型都必须实现 IDisposable 接口。
using(){}
对象不需要显示调用Dispose();

GC.Collect();遵循垃圾回收机制,分层回收
------解决方案--------------------
如果你总是想要手动搞这个,那与.net设计的初衷和卖点就背道而驰了。
------解决方案--------------------
探讨

System.GC.Collect(),强制立即回收

using,系统会在适时的时候进行回收,不一定是立即

------解决方案--------------------
GC.Collect是即时释放,而using只是在出了{}后告诉GC我是可以释放的资源,到底何时释放,得看GC
------解决方案--------------------
探讨

引用:

如果你总是想要手动搞这个,那与.net设计的初衷和卖点就背道而驰了。

不是啊 我们公司的系统里 有不少窗体都是通过模式化窗体打开
关闭以后 没处理资源释放 所以我们老大跟我提到这里
说以后尽量操作完以后 释放资源 可以dispose或者using
后来我想到还有 GC.Collect() 所以就上来问一下

------解决方案--------------------
using可以释放资源,GC释放内存,using完之后的内容就被标示了可以被GC,但是释放的时间不确定,可能就是下次GC运行的时候.不过,我也很想知道,Dispose以后的内容,其内存是被立刻释放了吗?还是等下次GC扫描呢?