> 'Для повторного использования класса необходимо
> 'полностью очистить внутреннее состояние
> '----------------------------------------------
> m_index_1st_undscore = -1
> m_index_2nd_undscore = -1
> m_middleSegmentNew = Nothing
> m_stringIn = in_word 'Это не приводит к созданию копии строки
> 'Осуществляем поиск символов подчеркивания ("_") в строке
> m_index_1st_undscore = in_word.IndexOf("_", 0)
> 'В случае отсутствия символов "_" все, что нам нужно, это первый сегмент
> If (m_index_1st_undscore = -1) Then
> Return
> End If
> 'Найти второй символ "_"
> m_index_2nd_undscore = in_word.IndexOf("_", _
> m_index_1st_undscore + 1)
>End Sub
>Public Function CompareMiddleSegment(ByVal compareTo As String) As Integer
> 'В случае отсутствия второго символа "_" отсутствует и средний сегмент
> If (m_index_2nd_undscore < 0) Then
> 'Если мы сравниваем с пустой строкой, то это означает
> 'совпадение
> If ((compareTo = Nothing) OrElse (compareTo = "")) Then
> Return 0
> End If
> Return -1
> End If
> 'Сравнить средний сегмент с первым и вторым сегментами
> Return System.String.Compare(m_stringIn, m_index_1st_undscore + 1, _
> compareTo, 0, _
> m_index_2nd_undscore - m_index_1st_undscore - 1)
>End Function
>Public Function getWholeString() As String
> 'Если полученный средний сегмент не является новым,
> 'возвратить исходный сегмент
> If (m_middleSegmentNew = Nothing) Then
> Return m_stringIn
> End If
> 'Создать возвращаемую строку
> Return m_stringIn.Substring(0, m index_1st_undscore + 1) + _
> m_middleSegmentNew + m_stringIn.Substring( _
> m_index_2nd_undscore, _
> m_stringIn.Length - m_index_2nd_undscore)
>End Function
>End Class
Листинг 8.9. Сравнение эффективности использования строк и класса stringBuilder в алгоритмах
>Const COUNT_UNTIL As Integer = 300
>Const LOOP_ITERATIONS As Integer = 40
>'---------------------------------------------------------
>'НЕ ОЧЕНЬ ЭФФЕКТИВНЫЙ АЛГОРИТМ!
>'Для имитации создания типичного набора строк используются
>'обычные строки
>'---------------------------------------------------------
>Private Sub Button1_Click(ByVal sender As System.Object, _
> ByVal e As System.EventArgs) Handles Button1.Click
> 'Вызвать сборщик мусора, чтобы тест
> 'начинался с чистого состояния.
> 'ПРИБЕГАЙТЕ К ЭТОЙ МЕРЕ ТОЛЬКО В ЦЕЛЯХ ТЕСТИРОВАНИЯ! Вызовы
> 'сборщика мусора в программах вручную будут приводить к снижению
> 'общей производительности приложений!
> System.GC.Collect()
> Dim numberToStore As Integer
> PerformanceSampling.StartSample(0, "StringAllocaitons")
> Dim total_result As String
> Dim outer_loop As Integer
> For outer_loop = 1 To LOOP_ITERATIONS
> 'Сбросить старый результат