books-read.com
books-read.com » Компьютеры и Интернет » Программирование » Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework

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

Наш ресурс дает возможность бесплатно читать книгу онлайн Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework. Жанр: Программирование издательство -, год -. Сайт books-read.com дает возможность читать полную версию книги без регистрации и sms. Все книги онлайн, не надо качать fb2, epub, txt.
Добавить книгу Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework в приложение ЧИТАТЬ КНИГУ ОФЛАЙН в приложении ios/android
Перейти на страницу:

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

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;

 }

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

 m_IndexOfTestTable = m_myDataSet.Tables.IndexOf(TABLE_NAME_PASSENGERINFO);


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

 //Итерировать по всем столбцам нашей таблицы

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

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

 m_TableCustomerInfo = m_myDataSet.Tables[m_IndexOfTestTable];

 int dataColumnCount = m_TableCustomerInfo.Columns.Count;

 System.Data.DataColumn myColumn;


 for (int colIdx = 0; colIdx < dataColumnCount;) {

  myColumn = m_TableCustomerInfo.Columns[colIdx];


  //Предпринимать поиск, только если это еще не сделано

  if (m_IndexOfTestColumn_CreditCard == INVALID_INDEX) {

   //Проверить, совпадает ли имя

   if (myColumn.ColumnName == COLUMN_NAME_PASSENGER_CREDIT_CARD) {

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

    m_IndexOfTestColumn_CreditCard = colIdx;


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

    m_TestColumn_CreditCard = myColumn;

    goto next_loop_iteration; //Опустить другие операции сравнения...

   } //Endif: сравнение строк

  } //Endif

  if (m_IndexOfTestColumn_TravelDate == INVALID_INDEX) {

   //Проверить, совпадает ли имя

   if (myColumn.ColumnName == COLUMN_NAME_DATE_OF_TRAVEL) {

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

    m_IndexOfTestColumn_TravelDate = colIdx;


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

    m_TestColumn_TravelDate = myColumn;

    goto next_loop_iteration; //Опустить другие операции сравнения.

   } //Endif: сравнение строк

  } //Endif

next_loop_iteration:

  colIdx++;

 }

 m_indexesLookedUp =true;

}


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

//Выполнить тест

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

void changeDayOfTravel_test(testType kindOfTest) {

 //Отобразить курсор ожидания

 System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor;


 //Начать с известной даты...

 System.DateTime newDate;

 newDate = System.DateTime.Today;

 changeDayOfTravel_textColumnLookup(ТЕST_CREDIT_CARD, newDate);


 //ДОПУСТИМО ТОЛЬКО ДЛЯ ТЕСТОВОГО КОДА!!!

 //Вызов сборщика мусора в коде ЗАМЕДЛИТ работу вашего приложения!

 System.GC.Collect();

 const int testNumber = 0;


 //Настроить соответствующим образом в зависимости от вида выполняемого теста

 switch (kindOfTest) {

 case testType.textColumnLookup:

  PerformanceSampling.StartSample(testNumber, "Text based Column lookup.");

  break;

 case testType.cachedIndexLookup:

  PerformanceSampling.StartSample(testNumber, "Cached Column Index lookup.");

  break;

 case testType.cachedColumnObject:

  PerformanceSampling.StartSample(testNumber, "Cached Column objects");

  break;

 default:

  throw new Exception("Unknown state!");

 }


 //Выполнить тест!

 for (int testCount = 0; testCount < NUMBER_TEST_ITERATIONS; testCount++) {

  //Передвинуть дату вперед на один день

  newDate = newDate.AddDays(1);

  int numberRecordsChanged = 0;


  //Какой вид теста мы выполняем?

  switch (kindOfTest) {

  case testType.textColumnLookup:

   //НИЗКАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Просмотреть все имена, используя СТРОКИ

   numberRecordsChanged =

    changeDayOfTravel_textColumnLookup(ТЕST_CREDIT_CARD, newDate);

   break;

  case testType.cachedIndexLookup:

   //ЛУЧШАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Использовать кэшированные индексы

   numberRecordsChanged =

    changeDayOfTravel_cachedColumnIndex(ТЕST_CREDIT_CARD, newDate);

   break;

  case testType.cachedColumnObject:

   //НАИЛУЧШАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Использовать кэшированные объекты

   //столбцов

   numberRecordsChanged =

    changeDayOfTravel_CachedColumns(TEST_CREDIT_CARD, newDate);

   break;

  }


  //Убедиться в том, что тест выполняется, как и ожидалось...

  if (numberRecordsChanged != 1) {

   System.Windows.Forms.MessageBox.Show("No matching records found. Test aborted!");

   return;

  }

 }


 //Получить время, которое потребовалось для выполнения теста

 PerformanceSampling.StopSample(testNumber);


 //Обычный курсор

 System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default;


 //Отобразить результаты выполнения теста

 string runInfo = NUMBER_TEST_ITERATIONS.ToString() + "x" +

  DUMMY_ROWS_OF_DATA.ToString() + ": ";

 System.Windows.Forms.MessageBox.Show(runInfo +

  PerformanceSampling.GetSampleDurationText(testNumber));

}


//ФУНКЦИЯ ПОИСКА, ОБЛАДАЮЩАЯ НИЗКОЙ ПРОИЗВОДИТЕЛЬНОСТЬЮ

private int changeDayOfTravel_ textColumnLookup(string creditCardNumber, System.DateTime newTravelDate) {

 int numberRecordsChanged = 0;


 //Найти имя таблицы

 System.Data.DataTable dataTable_Customers;


 //НИЗКАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Осуществить поиск в таблице, используя

 //сравнение строк!

 dataTable_Customers = m_myDataSet.Tables[TABLE_NAME_PASSENGERINFO];


 foreach (System.Data.DataRow currentCustomerRow in dataTable_Customers.Rows) {

  string currentCreditCard;


  //НИЗКАЯ ПРОИЗВОДИТЕЛЬНОСТЬ: Осуществить поиск в таблице, используя

  //сравнение строк!

  currentCreditCard = (string)currentCustomerRow[COLUMN_NAME_PASSENGER_CREDIT_CARD];


  //Проверить, является ли данная кредитная карточка искомой

  if (creditCardNumber == currentCreditCard) {

   //Изменить дату отъезда

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

Иво Салмре читать все книги автора по порядку

Иво Салмре - на сайте онлайн книг books-read.com Вы можете читать полные версии книг автора в одном месте.


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

Отзывы читателей о книге Программирование мобильных устройств на платформе .NET Compact Framework, автор: Иво Салмре. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор books-read.com


Прокомментировать
Подтвердите что вы не робот:*