Cамоучитель по VB.NET

       

Хронометраж — насколько быстрее работает класс StringBuilder?


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

Хронометраж в VB .NET реализуется легко — достаточно объединить метод Now с методом Ticks класса DateTlme. Как подсказывает само название, метод Now возвращает текущие показания системных часов. Метод Ti cks возвращает число типа Long, равное количеству 100-наносекундных интервалов, прошедших с 00:00 1 января 0001 года (1 наносекунда = 1/1 000 000 000 секунды).

Следующая программа использовалась для оценки того, насколько быстрее класс StringBuilder выполняет присоединение символов в конец строки по сравнению с классом String. Выигрыш растет с увеличением количества символов; при 50 000 символов эффективность возрастала более чем в 800 раз!

Option Strict On Module Modulel

Sub Main()

Dim i As Integer

Dim StartTime As New DateTime()

Dim EndTime As New DateTime()

StartTime =DateTime.Now()

Dim theText As New System.Text.SthngBuilder()

For i =1 To 50000

theText =theText.Append("A")

Next

EndTime =DateTime.Now

Dim answerl,answer2 As Long

' Количество 100-наносекундных интервалов

answer1 =EndTi me.Ticks()-StartTime.Ticks()

StartTime =DateTime.Now()

Dim aString As String

For i =1 To 50000

aString =aString & "A"

Next

EndTime =DateTime.Now

' Количество 100-наносекундных интервалов

answer2 =(EndTime.Ticks()-StartTime.Ticks())

Console.WriteLine("StringBuilder was " & _ answer? /answerl & "times faster.")

Console.ReadLine()

End Sub

End Module



Содержание раздела