Таблица 14.2. Сравнение производительности варианта приложения с пользовательским форматом данных, выполняющегося на физическом устройстве Pocket PC, с предыдущими результатами
Номер теста |
(А) Текстовый индекс, с |
(Б) Целочисленный индекс, с |
(В) Индексирование по объектам DataColumn, с |
(Г) Пользовательский формат данных, с |
|
(ADO.NET) |
(ADO.NET) |
(ADO.NET) |
(Пользовательский) |
1 |
32,538 |
30,09 |
23,554 |
12,268 |
2 |
33,063 |
30,387 |
23,491 |
12,335 |
3 |
32,87 |
30,372 |
23,582 |
12,358 |
Среднее |
32,82 |
30,28 |
23,54 |
12,32 |
Относительная производительность |
100% |
92% |
72% |
38% |
Приведенный в листинге 14.4 код необходимо включить в форму в проекте Pocket PC. Для создания и выполнения приложения потребуется выполнить следующие действия:
1. Запустите Visual Studio .NET (2003 или более позднюю версию) и выберите в качестве типа приложения C# Smart Device Application.
2. Выберите в качестве целевой платформы Pocket PC. (Для вас будет автоматически создан проект, и на экране появится окно конструктора форм Pocket PC.)
3. Добавьте в форму элемент управления Button. Присвойте ему имя buttonRunTest.
4. Дважды щелкните на элементе управления Button в окне конструктора форм. В автоматически сгенерированной и подключенной функции обработчика событий введите код функции buttonRunTest_Click() из листинга 14.4.
5. Введите весь оставшийся код в тот же класс.
6. Установите для свойства MinimizeBox формы значение false. Благодаря этому во время выполнения в верхней правой части формы появится кнопка OK, с помощью которой вы легко сможете закрыть форму и выйти из приложения. Эта возможность оказывается очень полезной при многократном тестировании приложения.
7. Запустите приложение, нажав клавишу . Щелкните на кнопке для запуска теста. Результаты тестирования должны отобразиться в окне сообщений.
Листинг 14.4. Результаты тестирования производительности при использовании пользовательского формата данных вместо объектов DataSet
//Определение размерных характеристик теста
const int DUMMY_ROWS_OF_DATA = 100;
const int NUMBER_TEST_ITERATIONS = 500;
const string TABLE_NAME_PASSENGERINFO = "CustomerTravelInfo";
const string TEST_CREDIT_CARD = "IvoCard-987-654-321-000";
string [] m_data_creditCards;
string [] m_data_names;
System.DateTime [] m_data_travelDates;
//-------------------------------------------------------------
//Создает массив данных (вместо использования объектов DataSet)
//-------------------------------------------------------------
private void createDataSet() {
//=============================================
//1. Создать пространство для размещения данных
//=============================================
m_data_creditCards = new string[DUMMY_ROWS_OF_DATA + 1];
m_data_names = new string[DUMMY_ROWS_OF_DATA + 1];
m_data_travelDates = new System.DateTime[DUMMY_ROWS_OF_DATA + 1];
//----------------------
//Добавить строки данных
//----------------------
System.Text.StringBuilder buildTestString;
buildTestString = new System.Text.StringBuilder();
for (int addItemsCount = 0; addItemsCount < DUMMY_ROWS_OF_DATA; addItemsCount++) {
//Выбрать день отъезда пассажира
m_data_travelDates[addItemsCount] = System.DateTime.Today.AddDays(addItemsCount);
//---------------------
//Выбрать имя пассажира
//---------------------
//Очистить строку
buildTestString.Length = 0;
buildTestString.Append("TestPersonName");
buildTestString.Append(addItemsCount);
m_data_names[addItemsCount] = buildTestString.ToString();
//-------------------------------------------------------
//Связать с пассажиром текстовый номер кредитной карточки
//-------------------------------------------------------
//Строка значения третьего столбца набора данных
buildTestString.Length = 0;
buildTestString.Append("IvoCard-000-000-0000-");
buildTestString.Append(addItemsCount);
m_data_creditCards[addItemsCount] = buildTestString.ToString();
}
//Добавить элемент, поиск которого мы хотим выполнить в нашем тесте...
//Выбрать день для значения в первом столбце данных
m_data_travelDates[DUMMY_ROWS_OF_DATA] = System.DateTime.Today;
//Строка для второго столбца данных
m_data_names[DUMMY_ROWS_OF_DATA] = "Ms. TestPerson";
//Строка с идентификатором кредитной карточки
m_data_creditCards[DUMMY_ROWS_OF_DATA] = ТЕST_CRE DIT_CARD;
} //Конец функции
//-----------------
//Выполнить тест...
//-----------------
void changeDayOfTravel_test() {
//Отобразить курсор ожидания
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor;
//Начать с известной даты...
System.DateTime newDate;
newDate = System.DateTime.Today;
changeDayOfTravel_CustomArrays(ТЕST_CREDIT_CARD, newDate);
//ТОЛЬКО В ЦЕЛЯХ ТЕСТИРОВАНИЯ!!!
Читать дальше