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

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

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

//Примечание. В этом примере используется класс PerformanceSampling,
//            определенный ранее в этой главе. Убедитесь в том, что
//            этот класс включен в проект
//ТЕСТОВАЯ ФУНКЦИЯ:
//Сложить 'n1' и 'n2' и возвратить результат
//в 'n3'
// Возвращаемое значение:
// TRUE: если результат положителен
// FALSE: если результат отрицателен
bool returnFalseIfLessThanZero_Add2Numbers(int n1, int n2, out int n3) {
 n3 = n1 + n2;
 //Результат меньше 0?
 if (n3 < 0) {
  return false;
 }
 return true;
}
//===========================================================
// ТЕСТОВАЯ ФУНКЦИЯ:
//
//Сложить 'n1' и 'n2' и возвратить результат
//в 'n3'
//
//Если 'n3' меньше 0, то функция ПЕРЕДАЕТ УПРАВЛЕНИЕ ОБРАБОТЧИКУ ИСКЛЮЧЕНИЙ.
//B противном случае возвращается TRUE
//===========================================================
bool exceptionIfLessThanZero_Add2Numbers(int n1, int n2, out int n3) {
 n3 = n1 + n2;
 //Результат меньше 0?
 if (n3 < 0) {
  throw new Ехсерtion("Результат меньше 0!");
 }
 return true;
}
//===========================================================
//Осуществляет многократные вызовы простой функции и
//измеряет общее время выполнения
//
//Вызываемая функция НЕ приводит к возбуждению исключений
//===========================================================
private void buttonRunNoExceptionCode_Click(object sender, System.EventArgs e) {
 const int TEST_NUMBER = 0;
 int numberIterations;
 numberIterations = System.Convert.ToInt32(textBoxNumberAttempts.Text);
 //Отобразить количество итераций, которые предстоит выполнить
 listBox1.Items.Add("=>" + numberIterations.ToString() + " итераций");
 int count_SumLessThanZero;
 int dataOut;
 //-------------------------------------------------------
 //Запустить таймер
 //-------------------------------------------------------
 PerformanceSampling.StartSample(TEST_NUMBER, "Исключения отсутствуют");
 //-------------------------------------------------------
 //Выполнить цикл, в котором осуществляется вызов функции
 //-------------------------------------------------------
 count_SumLessThanZero = 0;
 bool sumGreaterThanZero;
 for(int i = 0; i < numberIterations; i++) {
  //=========================
  //Вызвать тестовую функцию!
  //=========================
  sumGreaterThanZero = returnFalseIfLessThanZero_Add2Numbers(-2, -3, outdataOut);
  if (sumGreaterThanZero == false) {
   count_SumLessThanZero++;
  }
 } //конец цикла
 //-------------------------------------------------------
 //Остановить таймер
 //-------------------------------------------------------
 PerformanceSampling.StopSample(TEST_NUMBER);
 //-------------------------------------------------------
 //Показать результаты пользователю
 //-------------------------------------------------------
 if (count_SumLessThanZero == numberIterations) {
  System.Windows.Forms.MessageBox.Show("Тест выполнен");
  listBox1.Items.Add(PerformanceSampling.GetSampleDurationText(TEST_NUMBER));
 } else {
  System.Windows.Forms.MessageBox.Show("При выполнении теста возникали осложнения");
 }
}
//конец функции
//===========================================================
//Осуществляет многократные вызовы простой функции и
//измеряет общее время выполнения.
//
//Вызываемая функция ВОЗБУЖДАЕТ исключения
//===========================================================
private void buttonRunExceptionCode_Click(object sender, System.EventArgs e) {
 const int TEST_NUMBER = 1;
 //Получить количество итераций
 int numberIterations;
 numberIterations = System.Convert.ToInt32(textBoxNumberAttempts.Text);
 //Отобразить количество итераций, которые надлежит выполнить
 listBox1.Items.Add("=>" + numberIterations.ToString() + " итераций");
 int count_SumLessThanZero;
 int dataOut;
 //-------------------------------------------------------
 //Запустить таймер
 //-------------------------------------------------------
 PerformanceSampling.StartSample(TEST_NUMBER , "Перехват исключения");
 //-------------------------------------------------------
 //Выполнить цикл, в котором осуществляется вызов функции
 //-------------------------------------------------------
 count_SumLessThanZero = 0;
 bool sumGreaterThanZero;
 for (int i = 0; i < numberIterations; i++) {
  try {
   //=========================
   //Вызвать тестовую функцию!
   //=========================
   sumGreaterThanZero = exceptionIfLessThanZero_Add2Numbers(-2, -3, outdataOut);
  } catch {
   count_SumLessThanZero++;
  }
 } //конец цикла
 //-------------------------------------------------------
 //Остановить таймер
 //-------------------------------------------------------
 PerformanceSampling.StopSample(TEST_ NUMBER);
 //-------------------------------------------------------
 //Показать результаты пользователю
 //-------------------------------------------------------
 if (count_SumLessThanZero == numberIterations) {
  System.Windows.Forms.MessageBox.Show("Тест выполнен");
  listBox1.Items.Add(PerformanceSampling.GetSampleDurationText(ТЕST_NUMBER));
 } else {
  System.Windows.Forms.MessageBox.Show("При выполнении теста возникали осложнения");
 }
}

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


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