ASP.NET开发网站程序常见错误-设计理念(3)

王朝数码·作者佚名  2011-04-19
窄屏简体版  字體: |||超大  

二、对象只管创建应用,不管释放篇

我们继续用[Sample-01]的代码,我们现在看0004行的代码:

0004 Dim dtResult As New DataTable

谁会发现它被释放,你不能,我也不能,从来没有被释放过。

"0004"行的代码解释是,要在内存划分一个空间给这个定义的对象dtresult; 系统要划分多大的空间呢?呀,我没有研究过(留给那些有心人吧,呵呵..)。但有一点,要在内存划分一个空间,就是要占用内存。那么内存有多大呢,不是无限大吧,也是有限的,所有运行上述代码的最终结果是,系统的执行效率越来越慢,有人就怀疑,我有内存1到2G的,加上虚拟内存就更大,我只能说你的怀疑没错。可是你的应用程序就用这么一只函数吗?我想肯定不是,所以上百只函数的应用执行对内存的消耗可想而知。如果是后台自动运行的程序,及时是一个function,也会让系统崩溃。这只是一个简单的例子,有更复杂的。像这样的对象应用还有:Dataset, Datatable,DataReader,DataAdapter,Datagrid..等。

那么怎么解决这些问题呢:

2.1在Try catch 语句前定义好所用的对象,如:

Dim dtResult As New DataTable

Dim DR as New DataReader

Dim DS as New Dataset

Try

..

Catch ex As Exception

Throw ex

Finally

End Try

2.2释放的语句如下

Dim dtResult As New DataTable

Dim DR as New DataReader

Dim DS as New Dataset

Try

..

……………..

Catch ex As Exception

--释放应用的对象

Throw ex

Finally

--使用完后,释放应用的对象

dtResult.dispose --从内存里清楚该对象

DR.dispose -从内存里清楚该对象

DS.dispose -从内存里清楚该对象

End Try

有人习惯写成下面这样:

Dim dtResult As New DataTable

Dim DR as New DataReader

Dim DS as New Dataset

Try

..

‘使用完后,释放应用的对象

dtResult.dispose ‘从内存里清楚该对象

DR.dispose ‘从内存里清楚该对象

DS.dispose ‘从内存里清楚该对象

Catch ex As Exception

‘释放应用的对象

Throw ex

Finally

End Try

这不是也释放了吗?我想问的是,如果程序出现异常,它们会释放吗 ?我肯定得告诉大家,它们一定不能释放,为了确保程序的稳定运行,我建议大家都来用Try Catch语句。

第一頁    上一頁    第3頁/共6頁    下一頁    最後頁
第01頁 第02頁 第03頁 第04頁 第05頁 第06頁 
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航