Программирование мобильных устройств на платформе .NET Compact Framework (Салмре) - страница 536

>  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.5. Тестовый пример, демонстрирующий уменьшение объема памяти, распределяемой для объектов (типичный образец улучшения первоначального варианта реализации интересующей нас функции)

>Private Sub Button3_Click(ByVal sender As System.Object, _

> ByVal e As System.EventArgs) Handles Button3.Click

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

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

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

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

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

> System.GC.Collect()


> Dim testArray() As String = Nothing


> '--------------------------------------------------

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

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

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

> 'Запустить секундомер!

> '--------------------------------------------------

> PerformanceSampling.StartSample(1, "LessWasteful")


> '-------------------------------------------------------

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

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

> '-------------------------------------------------------

> Dim workerClass1 As LessWastefulWorkerClass

> workerClass1 = New LessWastefulWorkerClass


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

>   If (workerClass1.MiddleSegment = "blue") Then

>    'Заменить средний сегмент

>    workerClass1.MiddleSegment = "orange"

>    'Заменить слово

>    testArray(idx) = workerClass1.getWholeString()

>   End If

>  Next ' внутренний цикл

> Next 'внешний цикл


> 'Остановить секундомер!

> PerformanceSampling.StopSample(1)

> MsgBox(PerformanceSampling.GetSampleDurationText(1))

>End Sub

Листинг 8.6. Рабочий класс для второго тестового примера