以最简单的释放窗体资源为例
可以通过using(){}实现资源释放
也可以在form.FormClosing的时候 通过System.GC.Collect()释放资源
可是区别在哪呢
17 个解决方案
#1
using 是即时释放.
#2
System.GC.Collect(),强制立即回收
using,系统会在适时的时候进行回收,不一定是立即
using,系统会在适时的时候进行回收,不一定是立即
#3
using应该是释放{}中间的资源 运行到‘}’也就释放完了 对吧?
#4
是,但是内存并不一定会立即得到回收
#5
这样啊?那什么时候会回收?
#6
非托管资源的托管示例,有许多其他类别的非托管资源和封装这些资源的类库类型。所有这些类型都必须实现 IDisposable 接口。
using(){}
对象不需要显示调用Dispose();
GC.Collect();遵循垃圾回收机制,分层回收
using(){}
对象不需要显示调用Dispose();
GC.Collect();遵循垃圾回收机制,分层回收
#7
如果你总是想要手动搞这个,那与.net设计的初衷和卖点就背道而驰了。
#8
+1
#9
GC.Collect是即时释放,而using只是在出了{}后告诉GC我是可以释放的资源,到底何时释放,得看GC
#10
不是啊 我们公司的系统里 有不少窗体都是通过模式化窗体打开
关闭以后 没处理资源释放 所以我们老大跟我提到这里
说以后尽量操作完以后 释放资源 可以dispose或者using
后来我想到还有 GC.Collect() 所以就上来问一下
#11
而且using有一个好处,他相当于在finally块中的Dispose,这样保证即时中途有异常,也能正常释放资源
#12
using和dispose都不能即时释放的,必须得GC.Collect(),而微软建议不要手动调用GC.Collect(),影响性能
#13
释放非托管的资源可以Dispose(). 如果你没有Dispose,GC什么的也没用。
老大强调的是叫你Dispose.没叫你手动倒垃圾。
#14
不手动调用GC.Collect() 那该怎么做?不能在FormClosing里通过System.GC.Collect()释放?
#15
using可以释放资源,GC释放内存,using完之后的内容就被标示了可以被GC,但是释放的时间不确定,可能就是下次GC运行的时候.不过,我也很想知道,Dispose以后的内容,其内存是被立刻释放了吗?还是等下次GC扫描呢?
#16
Dispose释放的是非托管资源,当然是立即释放。托管资源那是由GC决定何时释放。这个和回收策略有关。
所以,这些倒垃圾的脏活累活,你还是不要亲力亲为了。系统会帮你处理的。
所以,这些倒垃圾的脏活累活,你还是不要亲力亲为了。系统会帮你处理的。
#17
有些时候就不行了 做了个东西 运行一段时间后总会出现内存泄露,只能GC.Collect(),不过好像会影响程序的性能
#1
using 是即时释放.
#2
System.GC.Collect(),强制立即回收
using,系统会在适时的时候进行回收,不一定是立即
using,系统会在适时的时候进行回收,不一定是立即
#3
using应该是释放{}中间的资源 运行到‘}’也就释放完了 对吧?
#4
是,但是内存并不一定会立即得到回收
#5
这样啊?那什么时候会回收?
#6
非托管资源的托管示例,有许多其他类别的非托管资源和封装这些资源的类库类型。所有这些类型都必须实现 IDisposable 接口。
using(){}
对象不需要显示调用Dispose();
GC.Collect();遵循垃圾回收机制,分层回收
using(){}
对象不需要显示调用Dispose();
GC.Collect();遵循垃圾回收机制,分层回收
#7
如果你总是想要手动搞这个,那与.net设计的初衷和卖点就背道而驰了。
#8
+1
#9
GC.Collect是即时释放,而using只是在出了{}后告诉GC我是可以释放的资源,到底何时释放,得看GC
#10
不是啊 我们公司的系统里 有不少窗体都是通过模式化窗体打开
关闭以后 没处理资源释放 所以我们老大跟我提到这里
说以后尽量操作完以后 释放资源 可以dispose或者using
后来我想到还有 GC.Collect() 所以就上来问一下
#11
而且using有一个好处,他相当于在finally块中的Dispose,这样保证即时中途有异常,也能正常释放资源
#12
using和dispose都不能即时释放的,必须得GC.Collect(),而微软建议不要手动调用GC.Collect(),影响性能
#13
释放非托管的资源可以Dispose(). 如果你没有Dispose,GC什么的也没用。
老大强调的是叫你Dispose.没叫你手动倒垃圾。
#14
不手动调用GC.Collect() 那该怎么做?不能在FormClosing里通过System.GC.Collect()释放?
#15
using可以释放资源,GC释放内存,using完之后的内容就被标示了可以被GC,但是释放的时间不确定,可能就是下次GC运行的时候.不过,我也很想知道,Dispose以后的内容,其内存是被立刻释放了吗?还是等下次GC扫描呢?
#16
Dispose释放的是非托管资源,当然是立即释放。托管资源那是由GC决定何时释放。这个和回收策略有关。
所以,这些倒垃圾的脏活累活,你还是不要亲力亲为了。系统会帮你处理的。
所以,这些倒垃圾的脏活累活,你还是不要亲力亲为了。系统会帮你处理的。
#17
有些时候就不行了 做了个东西 运行一段时间后总会出现内存泄露,只能GC.Collect(),不过好像会影响程序的性能