asp 性能测试报告 学习asp朋友需要了解的东西(5)
来源:asp之家 发布时间:2011-03-09 10:57:00
尽管如此,第三规则应该为:
l同一页面内用到多个记录集时,创建单一的连接对象并通过ActiveConnection属性共享它。
六、哪种游标类型和记录锁定方式效率最高?
迄今为止的所有测试中我们只使用了“只能向前”的游标来访问记录集。ADO为记录集提供的游标还有三种类型:静态可滚动的游标,动态可滚动的游标,键集游标。每种游标都提供不同的功能,比如访问前一记录和后一记录、是否可以看到其他程序对数据的修改等。不过,具体讨论每一种游标类型的功用已经超出了本文的范围,下表是各种游标类型的一个比较性的分析。
和“只能向前”类型的游标相比,所有其它的游标类型都需要额外的开销,而且这些游标在循环内一般也要慢一些。因此,我们愿与您共享如下告诫:永远不要这样认为——“唔,有时候我会用到动态游标,那么我就一直使用这种游标吧。”
同样的看法也适用于记录锁定方式的选择。前面的测试只用到了只读的加锁方式,但还存在其他三种方式:保守式、开放式、开放式批处理方式。和游标类型一样,这些锁定方式为处理记录集数据提供了不同的功能和控制能力。
我们得出如下规则:
l使用适合于处理任务的最简单的游标类型和记录锁定方式。
七、最好用哪种方法提取记录集?
到目前为止我们一直通过创建Recordset对象提取记录集,但是ADO也提供了间接的记录集提取方法。下面的测试比较ADO__03.asp和直接从Connection对象创建记录集(CONN_01.asp)这两种方法:
代码如下:
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open Application("Conn")
Set objRS = objConn.Execute(Application("SQL"))
可以看到页面开销略有增加,单个记录的显示时间没有变化。
下面我们再来看看从Command对象直接创建记录集对象(CMD__02.asp):
代码如下:
Set objCmd = Server.CreateObject("ADODB.Command")
objCmd.ActiveConnection = Application("Conn")
objCmd.CommandText = Application("SQL")
Set objRS = objCmd.Execute
同样,页面开销也略有增加,而单个记录的显示时间没有本质的变化。后面这两种方法在性能上的差异很小,但我们还有一个重要的问题需要考虑。
通过Recordset类创建记录集时,我们能够以最大的灵活性控制记录集的处理方式。既然后面两种方法未能有压倒性的性能表现,我们主要还是考虑默认返回的游标类型和记录锁定方式,对于某些场合来说默认值并不一定是最理想的。
因此,除非由于特殊的原因需要选择后面两种方法,否则我们建议考虑下面的规则:
l通过ADODB.Recordset类实例化记录集,以获得最好的性能和灵活性。
八、是否应该使用本地记录集?
ADO允许使用本地(客户端)记录集,此时查询将提取记录集内的所有数据,查询完成后连接可以立即关闭,以后使用本地的游标访问数据,这为释放连接带来了方便。使用本地记录集对于访问那些要求数据离线使用的远程数据服务非常重要,那么,对于普通的应用它是否同样有所帮助?
下面我们加入CursorLocation属性,并在打开记录集之后关闭了连接(CLIENT1.asp):
代码如下:
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.CursorLocation = 2' adUseClient
objRS.ActiveConnection = Application("Conn")
objRS.LockType = 1?' adLockReadOnly
objRS.Open Application("SQL")
objRS.ActiveConnection = Nothing
理论上,这种方法由于以下两个原因会对效率有所好处:第一,它避免了在记录之间移动时重复地通过连接请求数据;第二,由于能够方便地释放连接,它减轻了资源需求。然而,从上表看起来使用本地记录集对提高效率显然没有什么帮助。这或许是因为使用本地记录集时,不管程序设置的是什么,游标总是变成静态类型。
猜你喜欢
- 内容摘要:除了内部性能增强和优化外,IIS6.0版本的 Active Server Pages(ASP)&nb
- 最近写一个小小的留言本;算是对AJAX的综合应用迈出了一小步在制作过程中有很多兴奋的体验 虽然和以前的制作方法比起来繁杂了一些但是整个页面的
- 问题:我想每日从数据库里导出一些数据,内容基本上都是一样的,只是时间不同,比如导出一张表wjzcreate table wjz(id int
- 经常会在连接DB的时候用到,就是不知道代表什么意思。。。RS.OPEN SQL,CONN,A,BA: ADOPENFORWARDONLY(=
- 写在前面的话:此篇还是asp相关的,相信玩ASP的都有这个感觉,当数据有5万多条时-------just like音乐网,要调用最新的10条
- 有时候要用Javascript输常用的字符,比如每个页面都要有的脚注。这里提供一个转换脚本:将HTML自动转为JS代码<script&
- 关于asp缓存函数,类什么的,在网上可以说笔笔皆是,为啥我要不辞辛苦去写一个呢?大概看了下,各有各的优点吧,可是大部分好像不可以缓存数据额,
- 因此为了节省服务器资源,应该尽可能关闭连接以释放连接所占有的资源,这种关闭记录集的连接而不关闭记录集的技术叫做断开记录集,这个记录集本身则称
- 三遍记忆,让你记住海量素材的准确位置和用途,提高其可用性.这仅仅是一个示意图.在以往的日子里,我做到了只要脑袋里冒出一个想法,立刻就能知道我
- 在向大家详细介绍Linux mysql之前,首先让大家了解下Linux mysql,然后全面介绍Linux mysql,希望对大家有用。1.
- 使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:1。如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就
- ajax.html <html><head> <met
- 新上的一台服务器出现了一个现象:ASP程序中,调用函数Now(),显示的时间总是形如“2009-07-12 上午 08:12:56”这样的,
- 前言在php开发过程中,获取文件扩展名是非常常见的需求。比如我们在上传文件的时候,首先需要判断文件类型是否为我们允许上传的类型。这个时候就需
- 首先忠心感谢凌宇5942给我的帮助!在他的启迪下我发现了另一种实现flash透明背景的办法,愿与大家共同探讨:凌宇5942告知的解决办法:在
- 配置Laravel 的邮件服务可以通过 config/mail.php 配置文件进行配置。邮件中的每一项都在配置文件中有单独的配置项,甚至是
- 是什么能让一个设计看上去是协调的,有条理的,专业的?答案是”色彩”.不是所有的项目都要用那种浅的”公司蓝”(corporate blue)才
- 先把我的browser信息说明一下:这是在opera里about中显示的“浏览器识别”Opera/9.62 (Windows NT 5.1;
- 前言 绝大多数的Oracle数据库性能问题都是由于数据库设计不合理造成的,只有少部分问题根植于Database Buffer、Share P
- 如何正确理解和使用Command、Connection和 Recordset三个对象?我知道它们都是连接数据库的“好手”,但在编程的具体应用