Книга: Программирование мобильных устройств на платформе .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("При выполнении теста возникали осложнения");
}
}
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Forced writes - палка о двух концах
- Повышение производительности приложений с помощью хранимых процедур
- Сохранение информации из Интернета
- ОДНОМЕРНЫИ КОНТРАСТ
- Откуда нетбук получает питание?
- 8.1.4. Сравнение массивов
- 1.2.7. Исключения
- УПРАВЛЕНИЕ РЕПУТАЦИЕЙ В ИНТЕРНЕТЕ
- Листинг 15.11. Код для загрузки файла с Web-сервера
- 5.4. РЕКОМЕНДАЦИИ НАЧИНАЮЩИМ ПО СОСТАВЛЕНИЮ ОПИСАНИЙ АЛГОРИТМОВ И ЭВРОРИТМОВ
- 4.2 Сравнение SAN и NAS