博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
显式地释放你的ADO对象(转)
阅读量:2494 次
发布时间:2019-05-11

本文共 2043 字,大约阅读时间需要 6 分钟。

在真实的生活里,程序员天生懒惰. 这个事实使我们经常深陷BUG的泥塘. 尤其是当用ASP处理数据库连接时,它将让你感觉身处油锅.

在ASP里,我们建立数据库连接,然后用ADO获得数据查询的结果; 我们最常用到的是ADODB.Connection和ADODB.Recordset. 让我们看一个简单的例子来了解一下如何使用这两个对象:

Dim objConn

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DSN=Northwind"
objConn.Open
Dim objRS
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open "SELECT * FROM Table1", objConn

如果你还不是很熟悉数据库连接的话,请先阅读这篇文章

(http://www.4guysfromrolla.com/webtech/faq/Databases/faq2.shtml).

我们从objRS开始讨论我们的主题. 当我们用完objRS之后会做些甚麽呢? 通常情况下程序员不再进行任何操作,他们让ASP去料理后事. 当Server.CreateObject调用发生后,服务器将分配资源来操作这些对象的新实例(instances),如果我们不显式地通知服务器我们不再使用这些分配的资源了,ASP应该为我们释放这些资源. 对ASP完全信任有点儿冒险. 更安全和更可信的办法是显式地关闭和清除我们的Recordset和

Connection对象的实例.

我们该怎么关闭我们的对象及释放掉所分配的内存呢? 我们所要做的全部事情就是当我们用完这两个对象后调用以下的四行代码:

objRS.Close

Set objRS = Nothing
objConn.Close
Set objConn = Nothing

这样将强制释放资源,远胜过依赖ASP隐式地自动释放. 现在,你可能会有些疑惑:我们这么做真的很重要吗? 谁会在每个用过数据库连接的ASP页面里多写四行代码呢? 这样做的好处远远超过多写四行代码给我们带来的负担. 让我们引用

ActiveServerPages.com(http://www.activeserverpages.com/)的站长的一些话:

"你应该关闭Recordset,设为Nothing,关闭Connection,用同样的次序将其设为

Nothing. 标准的资源碎片收集是不完全的和不可信的.[前面提到的碎片收
集,Charles指的是隐式地清除服务器分配的资源.]

"DataReturn[一个ASP webhosting公司]有许多站点依赖IIS自动进行碎片收集时出现可怕的错误. 在加上Close/Set Nothing的几行代码后,这些站点又象马儿一样欢快地跑起来. 所有的大站都有显式释放资源的硬性规定."

如果Charles的话还不能让你信服,让我们来讨论一个由于没有显式使用内存再分配而出现的问题,这是个真实的例子. Brian Fairchild用Access做后台数据库来支持一个ASP大站. 他发现每过一阵子时间,ASP页面就会完全停止相应! HTML页能正常显示,但所有的ASP页面完全瘫痪,系统不得不重启. 最后,Brian发现,显式地关闭和释放Recordset和Connection对象,故障就全部消失了. (看看消息板上Brian谈及此故障的文章)(http://www.aspmessageboard.com/forum/performance.asp?

M=1321&P=1&F=23)

Charles Carroll还告诉我们一个技巧,那些用Access的用户应该增加缺省的线程数目. 这儿就是Charles所说的:

"注册表里Access缺省的线程数是4. 把它加到20将会使服务器跑得出乎寻常的顺畅, 但只是对Access特别管用,我们的服务器的CPU占用率从上午8点到晚上5点都是100%,但我在增加了线程数以后,服务器上的CPU马上凉快了下来."

想了解更多关于增加线程的信息,请看这里:

http://www.aspmagazine.com/aspmagazine/issue10kb.asp

好了,懒惰的程序员们听着,我想这篇文章应该能让你们多花上几秒种去关闭你们的ADO对象吧. 我已经劳驾自己多花上一些时间去写下那些必不可少的代码了!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-124496/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-124496/

你可能感兴趣的文章
53.Maximum Subarray
查看>>
xlistview(脚)
查看>>
咖啡豆(JavaBean)•香
查看>>
hdu2457 Trie图+dp
查看>>
杭电2075
查看>>
ASP.NET Core ---日志
查看>>
Android框架式编程之MVP架构
查看>>
oracle长连接超时设置
查看>>
2.联邦模式配置---扩容,负载均衡
查看>>
如何用C#语言构造蜘蛛程序
查看>>
解决Genymotion下载设备失败的方法(Connection Timeout)
查看>>
谷歌Android各版本的代号变迁
查看>>
Linux实战教学笔记37:企业级Nginx Web服务优化实战(上)
查看>>
Django实战(1):需求分析和设计
查看>>
光学基础知识:白光、颜色混合、RGB、色彩空间
查看>>
UEditor 插入图片大于2M提示文件大小超出范围解决办法
查看>>
测绘软件使用心得
查看>>
sql 相关子查询
查看>>
python 学习
查看>>
中文/英文换行总结
查看>>