Шрифт:
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. Рабочий класс для второго тестового примера
Option Strict
On Imports System
Public Class LessWastefulWorkerClass
Private m_beginning_segment As String
Public Property BeginSegment As String
Get
Return m_beginning_segment
End Get
Set(ByVal Value As String)
m_beginning_segment = Value
End Set
End Property