使用StringBuilder生成HTML服务器端时,空格是否重要?

时间:2015-01-22 16:07:03

标签: .net performance stringbuilder readability

我想知道在使用StringBuilder生成HTML时,使用空格来表示缩进(为了便于阅读)对性能有任何负面影响。

采用这个简化的例子:

 str.AppendLine("<div>")
 str.AppendLine("    <span>Test</span>")
 str.AppendLine("</div>")

相反:

 str.AppendLine("<div>")
 str.AppendLine("<span>Test</span>")
 str.AppendLine("</div>")

我正在寻找尽可能详细的解释,为什么或为什么不是这种情况

1 个答案:

答案 0 :(得分:1)

答案是:这取决于。如果与非空白对应物进行大量空白操作, 会对性能产生影响。这是一个基准测试:

Dim t1 = Task.Run(New Func(Of TimeSpan)(
                          Function()
                              Dim start = Now
                              Dim sb As New System.Text.StringBuilder

                              For i = 1 To 5000000
                                  sb.AppendLine("                                   My Value")
                              Next

                              sb.ToString()
                              Return Now - start
                          End Function))

Dim t2 = Task.Run(New Func(Of TimeSpan)(
                          Function()
                              Dim start = Now
                              Dim sb As New System.Text.StringBuilder

                              For i = 1 To 5000000
                                  sb.AppendLine("My Value")
                              Next

                              sb.ToString()
                              Return Now - start
                          End Function))

Debug.Print(String.Format("With Whitespace (ms): " & t1.Result.Milliseconds))
Debug.Print(String.Format("Without Whitespace (ms): " & t2.Result.Milliseconds))

这是一个极端的例子,其中每行与非空白相比具有大量额外的空白,并且它构建了500万行。在此示例中,输出为:

  

使用Whitespace(ms):757

     

没有空白(ms):371

但是,如果将构建的行数减少一半并将每行的额外空白量减少一半,则输出变为:

  

使用Whitespace(ms):223

     

没有空白(ms):175

然后再次将行数和空白数减少一半(即现在原来的四分之一):

  

使用Whitespace(ms):87

     

没有空白(ms):66

所以关键是,它确实会产生影响,但这取决于你如何使用它,最后,它只有几百毫秒的差异极端的情况。最终,由您(以及您的同行)决定在每种情况下重要的是:程序员的可读性或用户的响应能力。