Программирование мобильных устройств на платформе .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
'Создать возвращаемую строку
Поделиться с друзьями: