二、对象只管创建应用,不管释放篇
我们继续用[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语句。
ASP编码教程:如何实现/使用缓存
[ASP]2015年4月15日ASP编码教程:asp缓存的分类
[ASP]2015年4月15日ASP编码教程:何谓ASP缓存/为什么要缓存
[ASP]2015年4月15日ASP编码教程:asp实现的sha1加密解密代码
[ASP]2015年4月15日ASP编码教程:asp执行带参数的sql语句实例
[ASP]2015年4月14日