2015-01-22 4 views
2

Мне интересно, влияет ли использование пробелов для представления отступов (для чтения), что отрицательно сказывается на производительности при использовании StringBuilder для генерации HTML.Имеет ли значение пробела при использовании 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

Короткий ответ нет. Поскольку это просто рассматривается как другой персонаж. Однако ... это увеличит длину и, следовательно, размер памяти, выделенной для Stringbuilder. Это то, что нужно помнить – geekonedge

+0

Я продолжаю длинный ответ: P Увеличение размера памяти, выделенной для String Builder, будет поэтому влиять на производительность нет? – jessikwa

+0

Вы уже добавляете лишние пробелы, используя 'AppendLine' вместо' Append';) –

ответ

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)) 

Это крайний пример, в котором каждая строка имеет много дополнительных пробелов по сравнению с непробельных, и он строит пять миллионов строк. В этом примере, выход:

С Whitespace (мс): 757

без пробелов (мс): 371

Однако, если уменьшить количество линий, построенный наполовину и уменьшить количество дополнительных пробелов в строке наполовину, выход становится:

с Whitespace (мс): 223

без пробелов (мс): 175

, а затем уменьшить количество строк и пробелы снова наполовину снова (т.е. Сейчас четверть оригинала):

С Whitespace (мс): 87

без пробелов (мс): 66

Итак, суть в том, что это правда, это будет иметь но это зависит от того, как вы его используете, и в конце концов это всего лишь разница в несколько сотен миллисекунд в крайних случаях. В конечном счете, вам решать (и ваши сверстники) определить, что важно в каждой ситуации: читаемость для программиста или отзывчивость для пользователя.

+0

@jessikwa - я обновил свой ответ. –

+0

Фантастический, спасибо за объяснение! – jessikwa

+0

@jessikwa - приветствуется :) –

 Смежные вопросы

  • Нет связанных вопросов^_^