vb.net垃圾回收 c# 垃圾回收器

vb.net 内存回收机制 。。。。一般.net的垃圾回收机制会在过程结束后进行垃圾回收,但是垃圾回收是比较消耗系统资源的,所以不可能经常被调用 。
【vb.net垃圾回收 c# 垃圾回收器】如果你需要强制进行垃圾回收,可在过程最后添加如下代码:
GC.Collect()
强制进行垃圾回收
vb.net怎么把对象真正的立即释放掉.NET目前的垃圾回收机制不能实现把对象真正的立即释放掉,GC会对垃圾进行管理 , 如果垃圾没有引用计数了,就会被回收 。
编码的时候能用托管类尽量用托管类去实现你的功能,
对于实现了IDisposable接口的类,用完了记得调用close或者Dispose又或者相应的方法去释放资源,最好吧使用using语句块;
对于Com对象,用完了先关闭,然后调用Runtime.InteropServices.Marshal.FinalReleaseComObject()方法把Com对象的引用计数设置为0 。当 COM 对象的引用计数变为 0 时 , 通常会释放 COM 对象 , 不过这取决于 COM
对象的实现,而不是运行时可以控制的 。最后调用ComObj = Nothing以释放ComObj持有的引用 。不过要注意,只有当ComObj的生存期相对于垃圾回收器用于检测孤立对象的时间来说很长时,你才应该将变量设置为 Nothing 。
有部分来自MSDN
VB.net2000的自动垃圾回收机制到底管用么???????!!!!分类:电脑/网络程序设计其他编程语言
问题描述:
别跟我说VB2000自动释放内存,曾经深信这句话的我,如今已是伤痕累累,好几个大项目都差点毁在vb的内存问题上,C#我倒不知道..VB的回收内存速度太慢了,这只是保守的说,其实本人认为它根本不会回收内存.就算全部用上gc.collet也回收不了,而且越用越慢
在使用我的项目的时候,随着窗口的开开关关\控件的调用,内存一直飙,从14MB左右一路疯狂飙高,40分钟系统就崩溃了...上了补丁的XP可以不死机,但就定着不动了..如果虚拟内存文件大,可以维持到撑满,但录一条记录平均要等一个小时!!!!!!!,后来我学乖了开始nothing全局变量(工作量惊人...),结果内存开始有下走的现象(原来是一路向上..只占不放)但内存还是呈曲线上飙,40分钟到200多MB,于是我开始释放局部变量,在每个方法中都要释放!!!!!!!!!!!!!!!!!!!!!,而且还要区分哪些是引用!痛苦啊!!!
...结果三个月之后,满面憔悴的我终于发现内存接近正常了,虽然还不是释放的很干净,但能保证在一段时间内不会崩溃了..至少客户做的时候没再提过意见...我并没有优化什么代码,只是痛苦的释放了一些全局和局部变量,结果内存就不消耗的那么厉害了,你说奇怪不奇怪..但内存始终不是释放的那么干净,我算过了一分钟内曲线飙高2MB左右,有时更多照这样一来,真是早死不如晚死,想想将来还不如用java重新做呢...各位可怜可怜我吧,有什么好主意整理vb2000的内存的好东东,就告诉我吧!!!!!!!!!!我真的受不了了!!!!!有没有什么方法可以重新分配内存呢,就算会造成页中断我也在所不惜!!!!
另外Me.Refresh()是什么意义,能释放内存么?
解析:
很简单 , 你没有正确理解VB的内存自动回收机制,仔细看一下MSDN,好好研究一下相关的内容 。其实JAVA的内存自动回收机制与VB是类似的,如果你用VB.NET做不好 , 换用JAVA照样做不好 。
其实,你已经发现了为什么内存不能回收,只是你没意识到罢了 。
为什么要用全局变量呢?给你举个极端的例子吧:建立一个全局的Hashtable,然后将程序中创建的每一个对象实例加入到这个hashtable中,那么你将看到内存一直猛增,直到崩溃 。
正确的作法是:
1、尽量不用、少用全局变量和静态变量

推荐阅读