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

Листинг 7.4. Сравнение производительности двух алгоритмов, в одном из которых используются исключения, а во втором — нет

Листинг 7.4. Сравнение производительности двух алгоритмов, в одном из которых используются исключения, а во втором — нет

'==================================================================
'Примечание. В этом примере используется класс PerformanceSampling,
' определенный ранее в этой главе. Убедитесь в том, что
' этот класс включен в проект
'ТЕСТОВАЯ ФУНКЦИЯ:
'Сложить n1 и n2 и возвратить результат
'в n3
' Возвращаемое значение:
' TRUE: если результат положителен
' FALSE: если результат отрицателен
'==================================================================
Function returnFalseIfLessThanZero_Add2Numbers( _
 ByVal n1As Integer, ByVal n2 As Integer, _
 ByRef n3 As Integer) As Boolean
 n3 = n1 + n2
 'Результат меньше 0?
 If (n3 < 0) Then
  Return False
 End If
 Return True
End Function
'========================================================================
'ТЕСТОВАЯ ФУНКЦИЯ:
'Сложить n1 и n2 и возвратить результат
'в n3
'Если n3 меньше 0, то функция ПЕРЕДАЕТ УПРАВЛЕНИЕ ОБРАБОТЧИКУ ИСКЛЮЧЕНИЙ.
'В противном случае возвращается TRUE
'========================================================================
Function exceptionIfLessThanZero_Add2Numbers( _
 ByVal n1As Integer, ByVal n2As Integer, _
 ByRef n3 As Integer) As Boolean
 n3 = n1 + n2
 'Результат меньше 0?
 If (n3 <0) Then
  Throw New Exception("Результат меньше 0!")
 End If
 Return True
End Function
'=======================================================
'Осуществляет многократные вызовы простой функции и
'измеряет общее время выполнения
'Вызываемая функция НЕ приводит к возбуждению исключений
'=======================================================
Private Sub buttonRunNoExceptionCode_Click(ByVal senderAs System.Object, _
 ByVal eAs System.EventArgs) Handles buttonRunNoExceptionCode.Click
 Const TEST_NUMBERAs Integer = 0
 Dim numberItterations As Integer
 numberItterations = _
  CInt(textBoxNumberAttempts.Text)
 'Отобразить количество итераций, которые предстоит выполнить
 ListBox1.Items.Add("=>" + numberItterations.ToString() + " итераций")
 Dim count_SumLessThanZero As Integer
 Dim dataOut As Integer
 '----------------
 'Запустить таймер
 '----------------
 PerformanceSampling.StartSample(TEST_NUMBER, "Исключения отсутствуют")
 '------------------------------------------------------
 'Выполнить цикл, в котором осуществляется вызов функции
 '------------------------------------------------------
 count_SumLessThanZero = 0
 Dim sumGreaterThanZero As Boolean
 Dim i As Integer
 While (i < numberItterations)
  '=========================
  'Вызвать тестовую функцию!
  '=========================
  sumGreaterThanZero = _
   returnFalseIfLessThanZero_Add2Numbers(-2, -3, dataOut)
  If (sumGreaterThanZero = False) Then
   count_SumLessThanZero = count_SumLessThanZero + 1
  End If
  i = i + 1
 End While
 '-----------------
 'Остановить таймер
 '-----------------
 PerformanceSampling.StopSample(TEST_NUMBER)
 '--------------------------------
 'Показать результаты пользователю
 '--------------------------------
 If (count_SumLessThanZero = numberItterations) Then
  MsgBox("Тест выполнен")
  ListBox1.Items.Add( _
   PerformanceSampling.GetSampleDurationText(TEST_NUMBER))
 Else
  MsgBox("При выполнении теста возникали осложнения")
 End If
End Sub
'==================================================
'Осуществляет многократные вызовы простой функции и
'измеряет общее время выполнения.
'Вызываемая функция ВОЗБУЖДАЕТ исключения
'==================================================
Private Sub buttonRunExceptionCode_Click_Click(ByVal senderAs System.Object, _
 ByVal e As System.EventArgs) Handles buttonRunExceptionCode_Click.Click
 Const TESTNUMBERAs Integer = 1
 'Получить количество итераций Dim numberItterationsAs
 Integer numberItterations = _
  CInt(textBoxNumberAttempts.Text)
 'Отобразить количество итераций, которые надлежит выполнить
 ListBox1.Items.Add("=>" + numberItterations.ToString() + " итераций")
 Dim count_SumLessThanZero As Integer
 Dim dataOut As Integer
 '----------------
 'Запустить таймер
 '----------------
 PerformanceSampling.StartSample(TEST_NUMBER, "Перехват исключения")
 '------------------------------------------------------
 'Выполнить цикл, в котором осуществляется вызов функции
 '------------------------------------------------------
 count_SumLessThanZero = 0
 Dim sumGreaterThanZero As Boolean
 Dim i As Integer
 While (i < numberItterations)
  Try
   '=========================
   'Вызвать тестовую функцию!
   '=========================
   sumGreaterThanZero = _
    exceptionIfLessThanZero_Add2Numbers(-2, -3, dataOut)
  Catch
   count_SumLessThanZero = count_SumLessThanZero + 1
  End Try
  i = i + 1
 End While 'конец цикла
 '-----------------
 'Остановить таймер
 '-----------------
 PerformanceSampling.StopSample(TEST_NUMBER)
 '--------------------------------
 'Показать результаты пользователю
 '--------------------------------
 If (count_SumLessThanZero = numberItterations) Then
  MsgBox("Тест выполнен")
  ListBox1.Items.Add( _
   PerformanceSampling.GetSampleDurationText(TEST_NUMBER))
 Else
  MsgBox("При выполнении теста возникали осложнения")
 End If
End Sub
 

Оглавление книги


Генерация: 0.077. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз