我需要使用经典的 asp 页面修复服务器端脚本超时问题,该页面从数据库中读取数千行并鲁莽地连接字符串以创建一个巨大的 html 表。
我应该使用 Response.Write 还是使用 COM 来创建 StringBuilder?
我需要使用经典的 asp 页面修复服务器端脚本超时问题,该页面从数据库中读取数千行并鲁莽地连接字符串以创建一个巨大的 html 表。
我应该使用 Response.Write 还是使用 COM 来创建 StringBuilder?
您还可以使用 .NET System.IO.StringWriter 类(是的,这在经典 ASP 中是可能的!)
我在这个 StringBuffer 类中使用它:
Class StringBuffer
Dim buf
Private Sub Class_Initialize()
Set buf = CreateObject("System.IO.StringWriter")
End Sub
Private Sub Class_Terminate()
Set buf = Nothing
End Sub
Public Sub Append(ByVal strValue)
If Not IsNull(strValue) Then
buf.Write_12 CStr(strValue)
End If
End Sub
Public Sub AppendLine(ByVal strValue)
buf.Write_12 strValue & vbCRLF
End Sub
Public Function ToString()
ToString = buf.GetStringBuilder().ToString()
End Function
End Class
您已经发现了问题,这始终是一个好的开始。你提到的速度问题也是因为字符串连接使用了大量的内存——我认为,一旦你达到第三或第四个连接,StringBuilder 就会变得更有效率。
虽然我手头没有任何基准,但从体系结构的角度来看,我的偏好肯定是编写一个 COM 组件来为您处理数据库操作。您将受益于编译后的应用程序可以提供的更高速度,以及共享数据库连接等附加功能。
此外,如果您希望最终迁移到更现代的开发平台,它将允许您开始为未来的开发构建良好的数据模型;如果仔细计划和编写,您可能会发现大量代码可以重用,而且您有机会介绍经典 ASP 不[容易] 支持的开发实践,例如 TDD。
</personal-opinion>,很明显。
我尝试了 Roland Jansen(.NET System.IO.StringWriter 类)提出的解决方案,并将其与CodeGuru.com 上 Marcus Tucker 的 VBScript String Concatenation的解决方案进行了比较
Substring length: 50
Time /ms
Iterations Native Array ADO.Stream System.IO.StringWriter
1000 0.0 15.6 0.0 15.6
2000 31.3 0.0 15.6 31.3
3000 109.4 15.6 15.6 46.9
4000 279.3 17.6 13.7 64.5
5000 388.7 15.6 15.6 78.1
6000 625.0 13.7 33.2 91.8
7000 765.6 31.3 31.3 93.8
8000 935.5 31.3 31.3 125.0
9000 1,123.0 31.3 46.9 125.0
10000 1,607.4 29.3 46.9 156.3
另一个使用更长平均字符串的测试。
Substring length: 400
Time /ms
Iterations Native Array ADO.Stream System.IO.StringWriter
1000 93.8 0.0 0.0 31.3
2000 716.8 17.6 107.4 31.3
3000 1,857.4 15.6 341.8 64.5
4000 3,447.3 15.6 669.9 62.5
5000 - 31.3 1,091.8 93.8
6000 - 15.6 1,623.0 109.4
7000 - 29.3 2,201.2 109.4
8000 - 46.9 2,837.9 142.6
9000 - 29.3 3,636.7 154.3
10000 - 46.9 4,492.2 171.9
在我看来,数组解决方案仍然是最好的,StringWriter 紧随其后,因为在现实生活中我们倾向于处理较短的字符串连接。我有几页(我仍然维护的经典 ASP)根据用户查询吐出 0 到 30,000 行。结果在一个狭窄的行表中,每 TR 行平均 400 个字符。我在我实际的 Intranet 服务器上运行了这些测试;我在操作系统上没有管理员,所以我不知道它的规格。