If (m_IndexOfTestColumn_CreditCard = INVALID_INDEX) Then
'Проверить, совпадает ли имя
If (myColumn.ColumnName = _
COLUMN_NAME_PASSENGER_CREDIT_CARD) Then
'Кэшировать индекс
m_IndexOfTestColumn_CreditCard = colIdx
'Кэшировать столбец
m_TestColumn_CreditCard = myColumn
GoTo next_loop_iteration 'Опустить другие операции сравнения...
End If 'Endif: сравнение строк
End If
If (m _IndexOfTestColumn_TravelDate = INVALID_INDEX) Then
'Проверить, совпадает ли имя
If (myColumn.ColumnName = _
COLUMN_NAME_DATE_OF_TRAVEL) Then
'Кэшировать индекс
m_IndexOfTestColumn_TravelDate = colIdx
'Кэшировать столбец
m_TestColumn_TravelDate = myColumn
GoTo next_loop_iteration 'Опустить другие операции сравнения
End If 'Endif: сравнение строк
End If
next_loop_iteration:
colIdx = colIdx + 1
End While
m_indexesLookedUp = True
End Sub
'---------------
'Выполнить тест.
'---------------
Sub changeDayOfTravel_test(ByVal kindOfTest As testType)
'Отобразить курсор ожидания
System.Windows.Forms.Cursor.Current = _
System.Windows.Forms.Cursors.WaitCursor
'Начать с известной даты
Dim newDate As System.DateTime
newDate = System.DateTime.Today
changeDayOfTravel_textColumnLookup(TEST_CREDIT_CARD, newDate)
'ДОПУСТИМО ТОЛЬКО ДЛЯ ТЕСТОВОГО КОДА!!!
'Вызов сборщика мусора в коде ЗАМЕДЛИТ работу вашего приложения!
System.GC.Collect()
Const testNumber As Integer = 0
'Настроить соответствующим образом в зависимости от вида выполняемого теста
Select Case (kindOfTest)
Case testType.textColumnLookup
PerformanceSampling.StartSample(testNumber, _
"Text based Column lookup.")
Case testType.cachedIndexLookup
PerformanceSampling.StartSample(testNumber, _
"Cached Column Index lookup.")
Case testType.cachedColumnObject
PerformanceSampling.StartSample(testNumber, _
"Cached Column objects")
Case Else
Throw New Exception("Unknown state!")
End Select
'Выполнить тест!
Dim testCount As Integer
For testCount = 1 To NUMBER_TEST_ITERATIONS
'Передвинуть дату вперед на один день
newDate = newDate.AddDays(1)
Dim numberRecordsChanged As Integer = 0
'Какой вид теста мы выполняем?
Select Case (kindOfTest)
Case testType.textColumnLookup
'НИЗКАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Просмотреть все имена, используя СТРОКИ
numberRecordsChanged = _
changeDayOfTravel_textColumnLookup( _
TEST_CREDIT_CARD, newDate)
Case testType.cachedIndexLookup
'ЛУЧШАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Использовать кэшированные индексы
numberRecordsChanged = _
changeDayOfTravel_cachedColumnIndex( _
TEST_CREDIT_CARD, newDate)
Case testType.cachedColumnObject
'НАИЛУЧШАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Использовать кэшированные объекты
numberRecordsChanged = _
changeDayOfTravel_CachedColumns( _
TEST_CREDIT_CARD, newDate)
End Select
'Убедиться в том, что тест выполняется, как и ожидалось
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_textColumnLookup( _
ByVal creditCardNumber As String, _
ByVal newTravelDate As System.DateTime) As Integer
Dim numberRecordsChanged As Integer
'Найти имя таблицы
Dim dataTable_Customers As System.Data.DataTable
'НИЗКАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Осуществить поиск в таблице, используя
'сравнение строк!
dataTable_Customers = _
m_myDataSet.Tables(TABLE_NAME_PASSENGERINFO)
Dim currentCustomerRow As System.Data.DataRow
For Each currentCustomerRow In dataTable_Customers.Rows
Dim currentCreditCard As String
'НИЗКАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Осуществить поиск в таблице, используя
'сравнение строк!
currentCreditCard = CType( _
currentCustomerRow(COLUMN_NAME_PASSENGER_CREDIT_CARD), String)
'Проверить, является ли данная кредитная карточка искомой
If (creditCardNumber = currentCreditCard) Then
'Изменить дату отъезда
'НИЗКАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Осуществить поиск столбца, используя
'сравнение строк!
Dim currentTravelDate As System.DateTime = CType( _
currentCustomerRow(COLUMN_NAME_DATE_OF_TRAVEL), _
System.DateTime)
If (currentTravelDate <> newTravelDate) Then
'НИЗКАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Осуществить поиск столбца, используя
'сравнение строк!
currentCustomerRow(COLUMN_NAME_DATE_OF_TRAVEL) = _
newTravelDate
numberRecordsChanged = numberRecordsChanged + 1
End If
End If 'endif: сравнение строк
Next 'end for each
Return numberRecordsChanged 'Количество обновленных записей
End Function