当前位置: 首页 > 图文教程 > 网络编程 > ASP > 提高ASP性能的最佳选择(续一)

ASP
ASP正则表达式技巧
ASP Access实现网站计数器(访问量)
ASP新闻分页,将一篇过长的文章分页,生成静态页面
一些关于asp 购物车的想法
一个sql查询器,自动画表格填字段
ASP实现文件直接下载的代码
把网页中的(电话,qq等数字)生成图片的ASP程序
asp长文章用分页符来分页显示
Asp函数介紹(37个常用函数)
ASP中的面向对象类
分页实现方法的性能比较
asp ajax跨域提交数据
asp修改文件和文件夹的名字的代码
ASP 多关键词查询实例代码
asp被杀毒软件误删的解决方法
asp 多关键词搜索的简单实现方法
asp 根据IP地址自动判断转向分站的代码
asp dictionary对象的用法
ASP 千万级数据分页的存储过程
ASP隐藏真实文件的下载功能实现代码

提高ASP性能的最佳选择(续一)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 216 ::
收藏到网摘: n/a

    在本文的第一部分中,我回顾了有关ASP开发的一些基本问题,介绍了一些性能测试的结果,以理解我们放置在页面中的代码可能对运行性能造成什么样的影响。在这个系列的第二部分,我们将探讨经过论证的ASP最广泛的用途,即通过ActiveX 数据对象(ADO)交互使用数据库内容。ADO是Microsoft通用并简单的数据库界面。

  ADO有很多的功能设置,因此准备这篇文章时最大的挑战便是限制测试问题的范围。考虑到读取大数据集会为web 服务器施加很大的负载,我决定将研究的内容局限在为使用ADO记录集寻找最优化配置的方面。但是这个限制还是提出了一个挑战,因为ADO为执行同一个功能提供了多种方式。比如说,记录集可以从Recordset 类中恢复,也可以从Connection和Command 类中恢复。另外,一旦你有了一个记录集,那么有很多个选择会戏剧性地影响性能。因此,同第一部分一样,我将尽可能地多涉及一些具体问题。

目的
  我研究的目的是获取足够的信息以找到以下问题的答案:

  * 是否应该使用ADOVBS.inc包含文件?

  * 当使用一个记录集时,是否应该创建一个单独的Connection对象?

  * 恢复一个记录集最好的方法是什么?

  * 指针和锁的类型中,哪些是最有效的?

  * 是否应该使用断开的记录集?

  * 设置记录集(Recordset)属性的最好方法是什么?

  * 引用记录集中域值的最有效方法是什么?

  * 使用临时字符串可以较好地代替缓冲器吗?

测试是如何设立的?
  为进行这项研究中的测试,我们共组装了21个ASP页面(包含在本文下载内容中)。每个页面都被配置成用3个不同的查询返回记录集运行,这些记录集中分别有0、25、250条记录。这可以帮助我们将装载记录集的问题和在记录集中循环上的性能问题隔离开。

  为满足这些变化的条件,数据库连接字符串和测试SQL字符串都作为应用程序变量存储在Global.asa中。因为我们的测试数据库是在Microsoft SQL Server 7.0上运行的,因此我们的连接字符串指定OLEDB作为连接供应者、Northwind 样本数据库(包含在SQL服务器中)作为当前数据库。SQL SELECT语句要求Northwind Orders 表格中的7个特定域。

  < SCRIPT LANGUAGE=VBScript RUNAT=Server >

  Sub Application_OnStart

  Application("Conn") = "Provider=SQLOLEDB; " & _

  "Server=MyServer; " & _

  "uid=sa; " & _

  "pwd=;" & _

  "DATABASE=northwind"

  Application("SQL") = "SELECT TOP 0 OrderID, " & _

  " CustomerID, " & _

  " EmployeeID, " & _

  " OrderDate, " & _

  " RequiredDate, " & _

  " ShippedDate, " & _

  " Freight " & _

  "FROM [Orders] "

  End Sub

  < /SCRIPT >

  'alternate sql ?25 records

  Application("SQL") = "SELECT TOP 25 OrderID, " & _

  " CustomerID, " & _

  " EmployeeID, " & _

  " OrderDate, " & _

  " RequiredDate, " & _

  " ShippedDate, " & _

  " Freight " & _

  "FROM [Orders] "

  'alternate sql ?250 records

  Application("SQL") = "SELECT TOP 250 OrderID, " & _

  " CustomerID, " & _

  " EmployeeID, " & _

  " OrderDate, " & _

  " RequiredDate, " & _

  " ShippedDate, " & _

  " Freight " & _

  "FROM [Orders] "

  我们的测试服务器是一个双450 MHz Pentium ,512MB的RAM,在其上运行着NT Server 4.0 SP5, MDAC 2.1 (数据访问组件)以及Microsoft Scripting Engine的5.0版本。SQL服务器在一个同样规格的单独机器上运行。同第一篇文章一样,我使用Microsoft的Web应用程序重点工具记录从最初的页面请求到传输最后一个字节(TTLB )的时间,精确到服务器上的毫秒级。这个测试脚本运行20小时,调用每个页面1300次以上。显示的时间是session的平均TTLB。要记住的是,同第一篇文章一样,我们只是试图涉及性能方面的问题,而非伸缩性和容量的问题。

  还请注意,我们在服务器上开启了缓冲器。另外,我把所有的文件名都定为同样长度,