If (index segment2 = -1) Then

   m_end_segment = in_word.Substring(index_segment1 + 1)

   Return

  End If

  'Установить последний сегмент

  m_middle_segment = in_word.Substring(index_segment1 + 1, _

   index_segment2 - index_segment1 - 1)

  m_end_segment = in_word.Substring(index_segment2 + 1)

 End If

End Sub

Public Function getWholeString As String

 Return m_beginning_segment + " " + m_middle_segment + " " + _

  m_end_segment

End Function

End Class

Листинг 8.7. Тестовый пример, демонстрирующий значительное уменьшение объема памяти, распределяемой для объектов (типичный образец существенной алгоритмической оптимизации первоначального варианта реализации интересующей нас функции)

Private Sub Button5 Click(ByVal sender As System.Object, _

 ByVal e As System.EventArgs) Handles Button5.Click

 'Вызвать сборщик мусора, чтобы тест

 'начинался с чистого состояния.

 'ПРИБЕГАЙТЕ К ЭТОЙ МЕРЕ ТОЛЬКО В ЦЕЛЯХ ТЕСТИРОВАНИЯ! Вызовы

 'сборщика мусора в программах вручную будут приводить к снижению

 'общей производительности приложений!

 System.GC.Collect

 Dim testArray As String = Nothing

 '--------------------------------------------------

 'Просмотреть элементы массива и

 'найти те из них, в которых средним словом является

 '"blue". Заменить "blue" на "orange"

 '--------------------------------------------------

 'Запустить секундомер перед началом выполнения теста

 PerformanceSampling.StartSample(2, "DefferedObjects")

 '-------------------------------------------------------

 'БОЛЕЕ ЭКОНОМНЫЙ СПОСОБ: Распределить память для объекта

 'до вхождения в цикл

 '-------------------------------------------------------

 Dim workerClass1 As LessAllocationsWorkerClass

 workerClass1 = New LessAllocationsWorkerClass

 Dim outerLoop As Integer

 For outerLoop = 1 To LOOP_SIZE

  'Присвоить элементам массива значения, которые мы хотим использовать

  'при тестировании

  ResetTestArray(testArray)

  Dim topIndex As Integer = testArray.Length - 1 Dim idx As Integer

  For idx = 0 To topIndex

   '------------------------------------------------------------

   'Более экономный способ:

   'Теперь вместо повторного распределения памяти для объекта

   'нам достаточно лишь повторно воспользоваться им

   'Кроме того: в этом варианте реализации дополнительные строки

   'НЕ создаются

   'workerClass1 = new WastefulWorkerClass(

   '      testArray[topIndex])

   '------------------------------------------------------------

   workerClass1.ReuseClass(testArray(idx))

   'Если средним словом является "blue", заменить его на "orange"

   '-------------------------------------------------------------

   'Более экономный способ:

   'При таком способе сравнения не требуется создавать

   'никаких дополнительных строк

   '-------------------------------------------------------------

Перейти на страницу:

Похожие книги