Чтение онлайн

ЖАНРЫ

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

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

Private m_middle_segment As String

Public Property MiddleSegment As String

Get

Return m_middle_segment

End Get

Set(ByVal Value As String)

m_middle_segment = Value

End Set

End Property

Private m_end_segment As String

Public Property EndSegment As String

Get

Return m_end_segment

End Get

Set(ByVal Value As String)

m_end_segment = Value

End Set

End Property

Public Sub ReuseClass(ByVal in_word As String)

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

'Для повторного использования класса необходимо

'полностью очистить внутреннее состояние

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

m_beginning_segment = ""

m_middle_segment = ""

m_end_segment = ""

Dim index_segment1 As Integer

'Осуществляем поиск символов подчеркивания ("_") в строке

index_segment1 = in_word.IndexOf("_", 0)

'В случае отсутствия символов "_" все, что нам нужно, это первый сегмент

If (index_segment1 = -1) Then

m_beginning_segment = in_word

Return

Else

'Если присутствует символ "_", отсечь его

If (index_segment1 = 0) Then

Else

m_beginning_segment = in_word.Substring(0, _

index_segment1)

End If

Dim index_segment2 As Integer

index_segment2 = in_word.IndexOf("_", index_segment1 + 1)

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

Поделиться с друзьями: