Чтение онлайн

ЖАНРЫ

Программирование мобильных устройств на платформе .NET Compact Framework

Салмре Иво

Шрифт:

Разумеется, у решения, основанного на пользовательском формате данных, имеются и недостатки по сравнению с вариантами решений, в которых используются объекты ADO.NET DataSet. Самое главное — это то, что при необходимости обновления данных на сервере в нашем коде требуется организовать учет всех изменений данных. Это означает, что мы должны ввести, по крайней мере, один дополнительный столбец булевских значений, указывающих на то, в каких строках были сделаны изменения. Это не составляет особого труда в случае простых табличных данных, но значительно усложняется, если данные разбросаны по нескольким таблицам и связаны между собой целой системой различных отношений. Кроме того, ADO.NET предлагает объекты DataView, обеспечивающие сортировку и фильтрацию данных, чего мы лишены, если останавливаемся

на варианте пользовательской реализации модели данных. Расширение возможностей связано с дополнительными накладными расходами, и поэтому вы должны тщательно взвешивать все за и против, выбирая между функциональностью Al)O.NET и потенциально более высокой эффективностью пользовательской реализации. В случае приложений для устройств повышение эффективности часто окупает дополнительные затраты труда на разработку пользовательской модели данных на стадии проектирования.

Таблица 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. Запустите приложение, нажав клавишу <F5>. Щелкните на кнопке для запуска теста. Результаты тестирования должны отобразиться в окне сообщений.

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

Поделиться с друзьями: