Приведенный в листинге 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. Сравнение производительности различных вариантов доступа к данным с использованием объектов DataSetSystem.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;
}
//Кэшировать индекс таблицы