Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Программирование » Программирование мобильных устройств на платформе .NET Compact Framework - Иво Салмре

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

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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
Перейти на страницу:

  currentCreditCard = CType( _

   currentCustomerRow(m_TestColumn_CreditCard), _

   String)

  'Проверить, совпадает ли номер кредитной карточки

  If (creditCardNumber = currentCreditCard) Then

   'Изменить дату отъезда

   'НАИЛУЧШАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Использовать кэшированный индекс столбца!

   Dim currentTravelDate As System.DateTime = CType( _

    currentCustomerRow(m_TestColumn_TravelDate), _

    System.DateTime)

   If (currentTravelDate <> newTravelDate) Then

    'НАИЛУЧШАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Использовать кэшированный индекс столбца!

    currentCustomerRow(m_TestColumn_TravelDate) = _

     newTravelDate

    numberRecordsChanged = numberRecordsChanged + 1

   End If

  End If

 Next

 Return numberRecordsChanged 'Количество обновленных записей

End Function

'Событие щелчка на кнопке

Private Sub buttonRunTest_Click(ByVal sender As Object, _

 ByVal e As System.EventArgs) Handles buttonRunTest.Click

 createDataSet()

 cacheDataSetInfo()

 'НИЗКАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Использовать поиск по строкам

 changeDayOfTravel_test(testType.textColumnLookup)

 'ЛУЧШАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Использовать поиск по целочисленным индексам

 changeDayOfTravel_test(testType.cachedIndexLookup)

 'НАИЛУЧШАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Использовать поиск по объектам столбцов

 changeDayOfTravel_test(testType.cachedColumnObject)

End Sub

Листинг 14.4. Результаты тестирования производительности при использовании пользовательского формата данных вместо объектов DataSet

'Определение размерных характеристик теста

Const DUMMY _ROWS_OF_DATA As Integer = 100

Const NUMBER_TEST_ITERATIONS As Integer = 500

Const TABLE_NAME_PASSENGERINFO As String = "CustomerTravelInfo"

Const TEST_CREDIT_CARD As String = "IvoCard-987-654-321-000"

Private m_data_creditCards() As String

Private m_data_names() As String

Private m_data_travelDates() As System.DateTime

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

'Создает массив данных (вместо использования объектов DataSet)

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

Private Sub createDataSet()

 '=============================================

 '1. Создать пространство для размещения данных

 '=============================================

 ReDim m_data_creditCards(DUMMY_ROWS_OF_DATA)

 ReDim m_data_names(DUMMY_ROWS_OF_DATA)

 ReDim m_data_travelDates(DUMMY_ROWS_OF_DATA)

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

 'Добавить строки данных

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

 Dim buildTestString As System.Text.StringBuilder

 buildTestString = New System.Text.StringBuilder

 Dim addItemsCount As Integer

 For addItemsCount = 0 To DUMMY_ROWS_OF_DATA

  'Выбрать день отъезда пассажира

  m_data_travelDates(addItemsCount) = _

   System.DateTime.Today.AddDays(addItemsCount)

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

  'Выбрать имя пассажира

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

  'Очистить строку

  buildTestString.Length = 0

  buildTestString.Append("TestPersonName")

  buildTestString.Append(addItemsCount)

  m_data_names(addItemsCount) = buildTestString.ToString()

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

  'Связать с пассажиром текстовый номер кредитной карточки

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

  'Строка значения третьего столбца набора данных

  buildTestString.Length = 0

  buildTestString.Append("IvoCard-000-000-0000-")

  buildTestString.Append(addItemsCount)

  m_data_creditCards(addItemsCount) = _

   buildTestString.ToString()

 Next

 'Добавить элемент, поиск которого мы хотим выполнить в нашем тесте.

 'Выбрать день для значения в первом столбце данных

 m_data_travelDates(DUMMY_ROWS_OF_DATA) = _

  System.DateTime.Today

 'Строка для второго столбца данных

 m_data_names(DUMMY_ROWS OF DATA) = "Ms. TestPerson"

 'Строка с идентификатором кредитной карточки

 m_data_creditCards(DUMMY_ROWS_OF_DATA) = TEST_CREDIT_CARD

End Sub

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

'Выполнить тест.

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

Sub changeDayOfTravel_test()

 'Отобразить курсор ожидания

 System.Windows.Forms.Cursor.Current = _

  System.Windows.Forms.Cursors.WaitCursor

 'Начать с известной даты.

 Dim newDate As System.DateTime newDate = System.DateTime.Today

 changeDayOfTravel_CustomArrays(TEST_CREDIT_CARD, newDate)

 'ТОЛЬКО В ЦЕЛЯХ ТЕСТИРОВАНИЯ!!!

 'HE СЛЕДУЕТ использовать вызовы сборщика мусора в готовом программном

 'коде. Это ЗАМЕДЛЯЕТ работу приложения.

 System.GC.Collect()

 Const testNumber As Integer = 0

 'Запустить таймер теста

 PerformanceSampling.StartSample(testNumber, "Custom Array implementation")

 'Запустить тест!

 Dim testCount As Integer

 For testCount = 1 To NUMBER_TEST_ITERATIONS

  'Передвинуть дату вперед на один день

  newDate = newDate.AddDays(1)

  Dim numberRecordsChanged As Integer

  'Просмотреть все имена, используя СТРОКИ

  numberRecordsChanged = _

   changeDayOfTravel_CustomArrays(ТЕST_CREDIT_CARD, newDate)

  'Убедиться в нормальном выполнении теста

  If (numberRecordsChanged <> 1) Then

   MsgBox("No matching records found. Test aborted!")

   Return

  End If

 Next

 'Получить время выполнения теста

 PerformanceSampling.StopSample(testNumber)

 'Обычный курсор

 System.Windows.Forms.Cursor.Current = _

  System.Windows.Forms.Cursors.Default

 'Отобразить результаты теста

 Dim runInfo As String = NUMBER_TEST_ITERATIONS.ToString() + _

  "x" + DUMMY_ROWS_OF_DATA.ToString() + ": " MsgBox(runInfo + _

  PerformanceSampling.GetSampleDurationText(testNumber))

End Sub

Private Function changeDayOfTravel_CustomArrays( _

 ByVal creditCardNumber As String, ByVal newTravelDate _

 As System.DateTime) As Integer

 Dim numberRecordsChanged As Integer

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

 Dim index As Integer

 For index = 0 To DUMMY_ROWS_OF_DATA

  Dim currentCreditCard As String

  currentCreditCard = m_data_creditCards(index)

  'Обновить запись при наличии совпадения

  If (creditCardNumber = currentCreditCard) Then

   'Изменить дату поездки

   Dim currentTravelDate As System.DateTime = _

    m_data_travelDates(index)

   'Увеличить значение счетчика обновлений только при несовпадении данных

   If (currentTravelDate <> newTravelDate) Then

    m_data_travelDates(index) = _

     newTravelDate

    numberRecordsChanged = numberRecordsChanged + 1

   End If

  End If

 Next

 'Возвратить количество обновленных записей

 Return numberRecordsChanged

End Function

Private Sub buttonRunTest_Click(ByVal sender As Object, _

 ByVal e As System.EventArgs) Handles buttonRunTest.Click

 createDataSet()

 changeDayOfTravel_test()

End Sub

Листинг 14.5. Пример пользовательского управления данными — код, помещаемый в форму Form1.cs

'Создает базу данных

Private Sub buttonCreateDatabase_Click(ByVal sender As Object, _

 ByVal e As System.EventArgs) Handles buttonCreateDatabase.Click

 DatabaseAccess.CreateAndFillDatabase()

End Sub

'Загружает данные из базы данных и отображает их

Private Sub buttonLoadGameData_Click(ByVal sender As Object, _

 ByVal e As System.EventArgs) Handles buttonLoadGameData.Click

 'Очистить текстовое окно

 TextBox1.Text = ""

 'Загрузить данные для слов

 GameData.InitializeGameVocabulary()

 'Обойти все слова и добавить их в текстовый список

 Dim thisStringBuilder As System.Text.StringBuilder

 thisStringBuilder = New System.Text.StringBuilder

 Dim thisWord As VocabularyWord

 For Each thisWord In GameData.AllWords

  thisStringBuilder.Append(thisWord.EnglishWord)

  thisStringBuilder.Append(" = ")

  thisStringBuilder.Append( _

   thisWord.GermanWordWithArticleIfExists)

  thisStringBuilder.Append(vbCrLf) 'Новая строка

 Next

 'Отобразить список слов в текстовом окне

 TextBox1.Text = thisStringBuilder.ToString()

End Sub

Листинг 14.6. Пример кода управления данными для DatabaseAccess.cs

Option Strict On

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

'Код доступа к базе данных: Этот класс управляет доступом в

'базу данных наших приложений

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

Imports System

Friend Class DatabaseAccess

Const DATABASE_NAME As String = "LearnGerman.sdf"

Const CONNECT_STRING As String = _

 "Data Source = " + DATABASE_NAME + "; Password = ''"

Const TRANSLATIONTABLE_NAME As String = "TranslationDictionary"

Const TRANSLATIONTABLE_ENGLISH_COLUMN As String = "EnglishWord"

Const TRANSLATIONTABLE_GERMAN_COLUMN As String = "GermanWord"

Const TRANSLATIONTABLE_GERMANGENDER_COLUMN As String = "GermanGender"

Const TRANSLATIONTABLE_WORDFUNCTION_COLUMN As String = "WordFunction"

Friend Const DS_WORDS_COLUMNINDEX_ENGLISHWORD As Integer = 0

Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Программирование мобильных устройств на платформе .NET Compact Framework - Иво Салмре.
Комментарии