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

ЖАНРЫ

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

Return s_whitePen

End Function

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

'Эта функция позволяет получить доступ

'к полужирному шрифту, находящемуся в кэш-памяти

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

Private Shared Function g_GetBoldFont As System.Drawing.Font

'Если перо еще не существует, создать его

If (s_boldFont Is Nothing) Then

s_boldFont = New System.Drawing.Font( _

System.Drawing.FontFamily.GenericSerif, 10, System.Drawing.FontStyle.Bold)

End If

'Возвратить полужирный шрифт

Return s_boldFont

End Function

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

'Эта функция позволяет осуществлять доступ

'к находящемуся в кэш-памяти объекту imageAttributes,

'который мы используем для изображений с прозрачностью

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

Private Shared Function g_GetTransparencyImageAttribute As _

System.Drawing.Imaging.ImageAttributes

'Если объект не существует, создать его

If (s_ImageAttributeIs Nothing) Then

'Создать атрибут изображения

s_ImageAttribute = _

New System.Drawing.Imaging.ImageAttributes

s_ImageAttribute.SetColorKey(System.Drawing.Color.White, _

System.Drawing.Color.White)

End If

'Возвратить его

Return s_ImageAttribute

End Function

End Class

Листинг 8.2. Общий код, используемый во всех приведенных ниже вариантах тестов

'Желаемое число повторений теста

Const LOOP_SIZE As Integer = 8000

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

'Эта функция переустанавливает содержимое нашего тестового

'массива, что обеспечивает возможность многократного

'выполнения тестового алгоритма

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

Private Sub ResetTestArray(ByRef testArray As String)

If (testArray Is Nothing) Then

ReDim testArray(6)

End If

testArray(0) = "big_blue_duck"

testArray(1) = "small_yellow_horse"

testArray(2) = "wide_blue_cow"

testArray(3) = "tall_green_zepplin"

testArray(4) = "short_blue_train"

testArray(5) = "short_purple_dinosaur"

End Sub

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

Private Sub Button2_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button2.Click

'Вызвать сборщик мусора, чтобы быть уверенными в том, что

'тест начнется с чистого состояния.

'ПРИБЕГАЙТЕ К ЭТОЙ МЕРЕ ТОЛЬКО В ЦЕЛЯХ ТЕСТИРОВАНИЯ! Вызовы

'сборщика мусора в программах вручную будут приводить к снижению

'общей производительности приложений!

System.GC.Collect

Dim testArray As String = Nothing

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

'Просмотреть элементы массива и

'найти те из них, в которых средним словом является

'"blue". Заменить "blue" на "orange"

'Запустить секундомер для нашего теста!

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

PerformanceSampling.StartSample(0, "WastefulWorkerClass")

Dim workerClass1 As WastefulWorkerClass

Dim outerLoop As Integer

For outerLoop = 1 To LOOP_SIZE

'Присвоить элементам массива значения, которые мы хотим использовать

'при тестировании

ResetTestArray(testArray)

Dim topIndex = testArray.Length - 1

Dim idx As Integer

For idx = 0 To topIndex

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

'Создать экземпляр вспомогательного класса,

'который расчленяет строку на три части

'Это неэкономный способ!

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

workerClass1 = New WastefulWorkerClass(testArray(idx))

'Если средним словом является "blue", заменить его на "orange"

If (workerClass1.MiddleSegment = "blue") Then

'Заменить средний сегмент

workerClass1.MiddleSegment = "orange"

'Заменить слово

testArray(idx) = workerClass1.getWholeString

End If

Next 'внутренний цикл

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