上一篇:使用ASP实现基于WEB的数据库资料系统 >>
显式地释放你的ADO对象
在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马上凉快了下来."
下一篇:ASP怎样实现通过传真机把传真直接保存进数据库?! >>
相关文章:
- · Repeater显示数据的例子,带分页
- · 删除Access数词库中的空记录
- · ASP上两个防止SQL注入式攻击Function
- · DataGrid 分页问题 -- 无法响应 PageIndexChanged 事件
- · ADO三大对象的属性、方法、事件及常数
- · Asp数据库访问代码自动产生工具-ASPRunner(适用初学者和为了提高开发效率的Developer)
- · Connection 对象
- · 如何在ado中使用connection 对象什么是connection对象?
- · 数据验证之特殊字符处理
- · 如何让DataGrid自动生成序号
- · 几个小时后,我学数据库,找到一些代码
- · DataGrid自定义分页存储过程
- · Asp 单页查询数据库!
- · 用WEB(ASP)方式实现SQL SERVER 数据库的备份和恢复
- · Asp备份与恢复SQL Server数据库
- · XP 风格的可拖动列、可排序、可改变宽度的DataGrid的例子
- · datagrid编辑、修改、删除、翻页例子
- · DataGrid脚眉显示合计
- · datagrid编辑、修改、删除、翻页例子
- · 把dataset作为一个xml文件传给客户端
- · OLEDB Resource(Session) Pooling (在Ado开发中使用连接池)
- · DataReader使用
- · asp + oracle 分页方法 (不用存储过程)
- · 关于DropDownList绑定数据的一点认识
- · 在ASP中处理数据库的NULL记录
- · 求解在SQL中使用了where列所遇到的问题
- · asp + sqlserver 分页方法(不用存储过程)
- · 用的ASP防SQL注入攻击程序
- · MySQL数据库基础教程
- · ASP和SQLServer时间处理方法Ⅰ
- · 在SQL Server中保存和输出图片
- · 用ASP实现文档资料管理
- · ASP连接数据库的5种方法
- · 随机提取数据库记录
- · 常用Response对象的使用详解
- · 在DataGrid中删除记录时弹出确认窗口
- · SQL Server CHARINDEX和PATINDEX详解
- · DataGrid单击一行改变此行背景色
