Книга: Программирование мобильных устройств на платформе .NET Compact Framework

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

Листинг 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"
   '-------------------------------------------------------------
   'Более экономный способ:
   'При таком способе сравнения не требуется создавать
   'никаких дополнительных строк
   '-------------------------------------------------------------
   If (workerClass1.CompareMiddleSegment("blue") = 0) Then
    'Заменить средний сегмент
    workerClass1.MiddleSegment = "orange"
    'Заменить слово
    testArray(idx) = workerClass1.getWholeString()
   End If
  Next 'внутренний цикл
 Next 'внешний цикл
 'Остановить секундомер!
 PerformanceSampling.StopSample(2)
 MsgBox(PerformanceSampling.GetSampleDurationText(2))
End Sub

Оглавление книги

Оглавление статьи/книги

Генерация: 2.475. Запросов К БД/Cache: 2 / 2
поделиться
Вверх Вниз