В табл. 14 1 представлены результаты выполнения теста на физическом устройстве Pocket PC. Как и следовало ожидать, поиск по текстовому содержимому (столбец А) оказался самым медленным и потребовал 32,82 секунды. Поиск с использованием целочисленного индекса (столбец Б) привел к вполне ощутимому улучшению результатов на 8% и потребовал 30,28 секунд. Поиск с использованием объектов DataColumn (столбец В) принес 28%-ное улучшение по сравнению с текстовым поиском. Выигрыш довольно значительный и явно свидетельствует в пользу кэширования объектов DataColumn при выполнении циклических операций поиска данных в таблицах данных.

Таблица 14.1 Производительность тестового приложения при выполнении 500 итераций с использованием 201 строки данных на физическом устройстве Pocket PC

Номер теста(А) Текстовый индекс, с(Б) Целочисленный индекс, с(В) Индексирование по объектам DataColumn, с
132,53830,0923,554
233,06330,38723,491
332,8730,37223,582
Среднее32,8230,2823,54
Относительная производительность100%92%72% 

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

Листинг 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";

Перейти на страницу:

Похожие книги