vb.net虚拟内存 visual studio调整虚拟内存

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、尽量不用、少用全局变量和静态变量
2、如果没有必要,就不要把对象实例加到全局或静态的Hashtable、ArrayList之类的 *** 中去,除非你是想自己建立一个对象缓冲池
3、如果你自己要建立对象缓冲池,就一定要注意对象的清理,尽早将不用的对象从池中删除
4、找本好一点的数据结构,仔细学学其中关于自动内存回收的那几种机制 , 以后在程序中不要违反它们的要求前提条件 。
vb.net操作数据库的效率问题select * from XXX 如果数据量少还可以 , 如果数据量一大,需要从适配器在读取到Dataset中,这个是相当耗时的 。
其实,有一些程序可以采用 分段读?。?多次读取 。
像这样的写法,更新一条数据,就需要在重新读取所有的数据 。。耗费太大资源和贷款 。。
客户端也会导致很慢甚至读取数据假死 。。
-----------------------------
最好的方式不管你用DataRead还是什么,这些都根本解决不了这些问题 。
你需要做的就是如何高效读取/处理数据 。
BS 结构,可以采用异步加载数据和处理数据
CS结构异步加载和分段读取数据 。而不是一下子就把所有数据加载处理 。这样的话,CPU和内存占用率就会抬高 。。。。
---------------------------------
之前公司采用的方式就是这样的,DataSet和Fill

推荐阅读