VB.NET程序如何巧妙释放内存

VB.NET程序如何巧妙释放内存

2008-01-08 22:27
这样写就可以让内存占有变得比较小(亲自测试过可用)
 Private Sub frmMain_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
        Me.WindowState = System.Windows.Forms.FormWindowState.Minimized
        Me.WindowState = System.Windows.Forms.FormWindowState.Normal
    End Sub



参考文章:
http://hi.baidu.com/taikyo/blog/item/07984030ae94e897a8018e3b.html

众所周知,VB程序效率低下,但是开发难度相对较低。这次我们接下了昆明市少儿图书馆IC卡会员管理系统。由于用户时间要求高。我权衡再三,决定让大家采用VB.NET开发。这个项目确实给我们带来了挑战。对.NET的底层调用能力一直怀疑。但是在反复及大量的试验后,基本实现了跨平台跨语言。增加了很多信心。

   第一期已经验收了。前天又开始一轮测试。测试中,却发现了致命的问题。内存占用过大。先前我忽略这个问题的原因是.NET的垃圾回收机制,我还以为,垃圾问题是我们不用考虑的。但是今天看着任务管理器,我傻了。

但是还是得想办法的。开始网上展开天罗地网式搜索。结果好像答案还是很多的。

1.窗口.dipose() 该方法,应该是是释放内存中,不用的窗体资源。貌似有用的,但是仔细观 察,内存没发生改变,这是其次,关键是,这个窗口还会在你不想他出来的时候出来。后来,试验了发现。加上 set 窗体=nothing 这下,好像彻底了很多。重新调用这个窗体,必然要重新Load,这样一来,看来是处理。可是,看内存呢?还是不变!

2.后来网上重新提出窗体.finalize() 方法。说是窗口.dipose(),窗口.close()和该方法一起使用。但是没看出什么明显作用。

3.看来是要使用gc了?强行进行垃圾回收。一试,我靠,还是不起作用。

   就在临近绝望的时候,同学一个偶然的操作(因为测试很郁闷,无意中将窗口最小化了)这时,任务管理器突然变了,程序占用内存突然减小数倍。欣喜。改变代码,在finalize(),set 窗体=Nothing后加上了自动最小化,之后最大化。看起来一晃而过,但是,内存垃圾全不见了,呵呵。成功!

希望这个经验可以帮助一些朋友。关于原理,现在还不是很清楚。但是我会努力找到答案。

你可能感兴趣的:(.Net开发)