• 注册
  • 关于作者
    企业认证:趣记站长
    关注 6 粉丝 4 喜欢 9 内容 992
    江西省·南昌市
    聊天 送礼
    • 查看作者
    • 显式地释放你的ADO对象

      在真实的生活里,程序员天生懒惰. 这个事实使我们经常深陷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对象吧. 我已经劳驾自己多花上一些时间去写下那些必不可少的代码了! 

      微软建议的ASP性能优化28条守则
      ASP错误处理,ASP网站防范黑客技巧,巧用ASP技术保护DHTML源代码,用ASP取出HTML里面的图片地址的函数,ASP实现网页打开任何类型文件都保存,ASP木马Webshell安全解决办案,几招让你的网站免受采集之苦,ASP使用MYSQL数据库全攻略,Ad Rotator 组件参考,在Asp中使用存储过程数值类型值,asp防止同时登陆的问题,使用ASP重启服务器,在ASP程序中实现数据库事务控制,深入理解ASP中FSO的神奇功能,Asp中一些FSO方面的函数,用ASP编程实现网络内容快速查找,ASP实现文件直接下载,Adodb.Stream 组件的使用说明,全国省市县无刷新多级关联菜单,ASP上两个防止SQL注入式攻击Function
      ASP

    • 0
    • 0
    • 0
    • 96
    • 单栏布局 侧栏位置: