Литмир - Электронная Библиотека
Содержание  
A
A

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

  If (creditCardNumber = currentCreditCard) Then

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

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

   Dim currentTravelDate As System.DateTime = CType( _

    currentCustomerRow (m_IndexOfTestColumn_TravelDate), System.DateTime)

   If (currentTravelDate <> newTravelDate) Then

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

    currentCustomerRow(m_IndexOfTestColumn_TravelDate) = _

     newTravelDate

    numberRecordsChanged = numberRecordsChanged + 1

   End If

  End If

 Next

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

End Function

'ФУНКЦИЯ, ОБЛАДАЮЩАЯ НАИЛУЧШЕЙ ПРОИЗВОДИТЕЛЬНОСТЬЮ

Private Function changeDayOfTravel_CachedColumns( _

 ByVal creditCardNumber As String, _

 ByVal newTravelDate As System.DateTime) As Integer

 Dim numberRecordsChanged As Integer

 'Найти имя таблицы

 Dim dataTable_Customers As System.Data.DataTable = _

  m_TableCustomerInfo

 Dim currentCustomerRow As System.Data.DataRow

 For Each currentCustomerRow In dataTable_Customers.Rows

  Dim currentCreditCard As String

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

  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

265
{"b":"947732","o":1}