2

我需要使用经典的 asp 页面修复服务器端脚本超时问题,该页面从数据库中读取数千行并鲁莽地连接字符串以创建一个巨大的 html 表。

我应该使用 Response.Write 还是使用 COM 来创建 StringBuilder?

4

3 回答 3

7

您还可以使用 .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
于 2013-07-12T11:04:55.043 回答
2

您已经发现了问题,这始终是一个好的开始。你提到的速度问题也是因为字符串连接使用了大量的内存——我认为,一旦你达到第三或第四个连接,StringBuilder 就会变得更有效率。

虽然我手头没有任何基准,但从体系结构的角度来看,我的偏好肯定是编写一个 COM 组件来为您处理数据库操作。您将受益于编译后的应用程序可以提供的更高速度,以及共享数据库连接等附加功能。

此外,如果您希望最终迁移到更现代的开发平台,它将允许您开始为未来的开发构建良好的数据模型;如果仔细计划和编写,您可能会发现大量代码可以重用,而且您有机会介绍经典 ASP 不[容易] 支持的开发实践,例如 TDD。

</personal-opinion>,很明显。

于 2013-07-11T15:21:16.917 回答
2

我尝试了 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 服务器上运行了这些测试;我在操作系统上没有管理员,所以我不知道它的规格。

于 2019-06-05T12:53:45.163 回答