我想知道在使用StringBuilder生成HTML时,使用空格来表示缩进(为了便于阅读)对性能有任何负面影响。
采用这个简化的例子:
str.AppendLine("<div>")
str.AppendLine(" <span>Test</span>")
str.AppendLine("</div>")
相反:
str.AppendLine("<div>")
str.AppendLine("<span>Test</span>")
str.AppendLine("</div>")
我正在寻找尽可能详细的解释,为什么或为什么不是这种情况
答案 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
所以关键是,它确实会产生影响,但这取决于你如何使用它,最后,它只有几百毫秒的差异极端的情况。最终,由您(以及您的同行)决定在每种情况下重要的是:程序员的可读性或用户的响应能力。