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

ЖАНРЫ

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

Салмре Иво

Шрифт:

 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

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

Option Strict On

Imports System

Public Class LessAllocationsWorkerClass

Public WriteOnly Property MiddleSegment As String

 Set(ByVal Value As String)

m_middleSegmentNew = Value

 End Set

End Property

Private m_middleSegmentNew As String

Private m_index_1st_undscore As Integer

Private m_index_2nd_undscore As Integer

Private m_stringIn As String

Public Sub ReuseClass(ByVal in_word As String)

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

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

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

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

 m_index_1st_undscore = -1

 m_index_2nd_undscore = -1

 m_middleSegmentNew = Nothing

 m_stringIn = in_word 'Это не приводит к созданию копии строки

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

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

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

 If (m_index_1st_undscore = -1) Then

Return

 End If

 'Найти второй символ "_"

 m_index_2nd_undscore = in_word.IndexOf("_", _

m_index_1st_undscore + 1)

End Sub

Public Function CompareMiddleSegment(ByVal compareTo As String) As Integer

 'В случае отсутствия второго символа "_" отсутствует и средний сегмент

 If (m_index_2nd_undscore < 0) Then

'Если мы сравниваем с пустой строкой, то это означает

'совпадение

If ((compareTo = Nothing) OrElse (compareTo = "")) Then

Return 0

End If

Return -1

 End If

 'Сравнить средний сегмент с первым и вторым сегментами

 Return System.String.Compare(m_stringIn, m_index_1st_undscore + 1, _

compareTo, 0, _

m_index_2nd_undscore - m_index_1st_undscore - 1)

End Function

Public Function getWholeString As String

 'Если полученный средний сегмент не является новым,

 'возвратить исходный сегмент

 If (m_middleSegmentNew = Nothing) Then

Return m_stringIn

 End If

 'Создать возвращаемую строку

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