加入收藏 | 设为首页 | 会员中心 | 我要投稿 南平站长网 (https://www.0599zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

改进ASP应用程序中的字符串处理性能(2) - ASP教程

发布时间:2016-08-05 03:38:42 所属栏目:Asp教程 来源:站长网
导读:此类中使用的基本原则是,在类级别将变量 (m_sText) 用作字符串缓冲区 ,并使用 Space$ 函数以空格字符填充此缓冲区以将其设置为特定的大
此类中使用的基本原则是,在类级别将变量 (m_sText) 用作字符串缓冲区 ,并使用 Space$ 函数以空格字符填充此缓冲区以将其设置为特定的大小。如果 要将更多文本与现有文本连接在一起,则在检查缓冲区的大小足以存放新文本后 ,使用 Mid$ 函数在正确位置插入文本。ToString 函数将返回当前存储在缓冲区 中的文本,并将缓冲区的大小调整为能够容纳此文本的正确长度。使用 StringBuilder 的 ASP 代码如下所示:

Function WriteHTML( Data )
Dim oSB
Dim nRep
Set oSB = Server.CreateObject( "StringBuilderVB.StringBuilder" )
' 用大小和增长系数初始化缓冲区
oSB.Init 15000, 7500
For nRep = 0 to 99
oSB.Append "<TR><TD>", (nRep + 1), "</TD><TD> ", _
Data( 0, nRep ), "</TD><TD>", _
Data( 1, nRep ), "</TD><TD>", _
Data( 2, nRep ), "</TD><TD>", _
Data( 3, nRep ), "</TD><TD>", _
Data( 4, nRep ), "</TD><TD>", _
Data( 5, nRep ), "</TD></TR>"
Next
WriteHTML = oSB.ToString()
Set oSB = Nothing
End Function

使用 StringBuilder 需要一定的开销,因为每次使用此类时都必须创建它的 实例,并且在创建第一个类实例时必须加载包含此类的 DLL。对 StringBuilder 实例进行额外方法调用时也需要开销。使用加括号的“&”方法时 ,StringBuilder 如何执行取决于多个因素,包括连接的数目、要构建的字符串 的大小以及选择的 StringBuilder 字符串缓冲区的初始化参数的性能。请注意, 在多数情况下,将缓冲区中所需的空间量估计得略高一些要远远好于让其不断增 长。

内置方法

ASP 包含一种非常快捷的创建 HTML 代码的方法,只需多次调用 Response.Write。Write 函数使用隐式优化的字符串缓冲区,此缓冲区能够提供 非常优秀的性能特性。修改后的 WriteHTML 代码如下所示:

Function WriteHTML( Data )
Dim nRep
For nRep = 0 to 99
Response.Write "<TR><TD>"
Response.Write (nRep + 1)
Response.Write "</TD><TD>"
Response.Write Data( 0, nRep )
Response.Write "</TD><TD>"
Response.Write Data( 1, nRep )
Response.Write "</TD><TD>"
Response.Write Data( 2, nRep )
Response.Write "</TD><TD>"
Response.Write Data( 3, nRep )
Response.Write "</TD><TD>"
Response.Write Data( 4, nRep )
Response.Write "</TD><TD>"
Response.Write Data( 5, nRep )
Response.Write "</TD></TR>"
Next
End Function

虽然这段代码很可能为我们提供最佳的性能和可缩放性,但在某种程度上已经 破坏了封装,因为现在会将函数内部的代码直接写入 Response 流,所以调用代 码丧失了一定程度的控制权。另外,移动此代码(例如,移入 COM 组件)将变得 更加困难,因为此函数与 Response 流存在依赖关系。

测试

上面提到的四种方法分别通过一个简单的 ASP 页面(包含一个由虚拟字符串 数组提供数据的单个表格)进行了测试。我们使用 Application Center Test? (ACT) 从单个客户端(Windows? XP Professional,PIII-850MHz,512MB RAM )针对 100Mb/sec 网络中的单个服务器(Windows 2000 Advanced Server,双 PIII-1000MHz,256MB RAM)执行了测试。ACT 配置为使用 5 个线程,以模拟 5 个用户连接至网站时的负载。每个测试都包括 20 秒预热时间和随后的 100 秒负 载时间,在负载期间创建了尽可能多的请求。

通过更改主表格循环中的重复次数,针对不同数目的连接操作重复运行测试, 如 WriteHTML 函数中的代码片断所示。运行的每个测试都使用上文提到的四种不 同的方法执行。

(编辑:南平站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读