> 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