Выбрать главу

Приведенный в листинге 14.3 код необходимо включить в форму в проекте Pocket PC. Для создания и выполнения приложения потребуется выполнить следующие действия.

1. Запустите Visual Studio .NET (2003 или более позднюю версию) и выберите в качестве типа приложения C# Smart Device Application.

2. Выберите в качестве целевой платформы Pocket PC. (Для вас будет автоматически создан проект, и на экране появится окно конструктора форм Pocket PC.)

3. Добавьте в форму элемент управления Button. Присвойте ему имя buttonRunTest. 

4. Дважды щелкните на элементе управления Button в окне конструктора форм. В автоматически сгенерированной и подключенной функции обработчика событий введите код функции buttonRunTest_Click() из листинга 14.3.

5. Введите весь оставшийся код в тот же класс.

6. Установите для свойства MinimizeBox формы значение false. Благодаря этому во время выполнения в верхней правой части формы появится кнопка OK, с помощью которой вы легко сможете закрыть форму и выйти из приложения. Эта возможность оказывается очень полезной при многократном тестировании приложения.

7. Запустите приложение, нажав клавишу <F5>. Для запуска всех трех вариантов тестирования на выполнение следует щелкать на кнопке. После каждого прогона приложения должно появляться окно сообщений, содержащее результаты тестирования.

Листинг 14.3. Сравнение производительности различных вариантов доступа к данным с использованием объектов DataSet

System.Data.DataSet m_myDataSet; //Объект Dataset для теста

//Индексы столбцов и таблицы, подлежащие кэшированию

private bool m_indexesLookedUp = false;

private const int INVALID_INDEX = -1;

private int m_IndexOfTestColumn_CreditCard = INVALID_INDEX;

private int m_IndexOfTestColumn_TravelDate = INVALID_INDEX;

private int m_IndexOfTestTable = INVALID_INDEX;

//Столбцы данных и таблица, подлежащие кэшированию

System.Data.DataColumn m_TestColumn_CreditCard;

System.Data.DataColumn m_TestColumn_TravelDate;

private System.Data.DataTable m_TableCustomerInfo;

//3 вида тестов, которые мы можем выполнять

public enum testType {

 textColumnLookup, cachedIndexLookup, cachedColumnObject

}

//Эти константы определяют размерные характеристики тестов

const int DUMMY_ROWS_OF_DATA = 100;

const int NUMBER_TEST_ITERATIONS = 500;

//Табличная информация

const string TABLE_NAME_PASSENGERINFO = "CustomerTravelInfo";

const string COLUMN_NAME_DATE_OF_TRAVEL = "DateOfTravel";

const string COLUMN_NAME_PASSENGER_NAME = "PassengerName";

const string COLUMN_NAME_PASSENGER_CREDIT_CARD = "PassengerCreditCard";

const string TEST_CREDIT_CARD = "IvoCard-987-654-321-000";

//--------------------

//Создает набор данных

//--------------------

private void createDataSet() {

 //1. Создать новый объект DataSet

 m_myDataSet = new System.Data.DataSet("TravelService Dataset");

 //2. Добавить объект DataTable в объект ADO.NET DataSet

 System.Data.DataTable myTestTable;

 myTestTable = m_myDataSet.Tables.Add(TABLE_NAME _PASSENGERINFO);

 //Добавить 2 столбца в таблицу

 //Добавить столбец данных в таблицу DataTable набора данных DataSet

 myTestTable.Columns.Add(COLUMN_NAME_DATE_OF_TRAVEL,typeof(System.DateTime));

 //Добавить столбец строк в таблицу DataTable набора данных

 DataSet myTestTable.Columns.Add(COLUMN_NAME_PASSENGER NAME,typeof(string));

 //Добавить столбец строк в таблицу DataTable набора данных DataSet

 myTestTable.Columns.Add(COLUMN_NAME_PASSENGER_CREDIT_CARD,typeof(string));

 //Данные для размещения в строках данных

 object[] objArray;

 objArray = new object[3];

 //--------------------------------

 //Добавить строки данных в таблицу

 //--------------------------------

 System.Text.StringBuilder buildTestString;

 buildTestString = new System.Text.StringBuilder();

 for (int addItemsCount = 0; addItemsCount < DUMMY_ROWS_OF_DATA; addItemsCount++) {

  //Выбрать день отъезда пассажира

  objArray[0] = System.DateTime.Today.AddDays(addItemsCount);

  //Выбрать имя пассажира

  buildTestString.Length = 0;

  buildTestString.Append("TestPersonName");

  buildTestString.Append(addItemsCount);

  objArray[1] = buildTestString.ToString();

  //Связать с пассажиром текстовый номер кредитной карточки

  buildTestString.Length = 0;

  buildTestString.Append("IvoCard-000-000-0000-");

  buildTestString.Append(addItemsCount);

  objArray[2] = buildTestString.ToString();

  //Добавить элементы массива в строку набора данных

  myTestTable.Rows.Add(objArray);

 }

 //Добавить элемент, поиск которого мы хотим проводить при выполнении теста

 objArray[0] = System.DateTime.Today;

 objArray[1] = "Ms. TestPerson";

 objArray[2] = TEST_CREDIT_CARD;

 //Добавить элементы массива в строку набора данных

 myTestTable.Rows.Add(objArray);

} //Конец функции

//---------------------------------------------------------------

//Найти и кэшировать все индексы набора данных, которые нам нужны

//---------------------------------------------------------------

private void cacheDataSetInfo() {

 //Выйти из функции, если индексы уже загружены

 if (m_indexesLookedUp == true) {

  return;

 }

 //Кэшировать индекс таблицы