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;
} //Конец функции
//-----------------
//Выполнить тест...
//-----------------
void changeDayOfTravel_test() {
//Отобразить курсор ожидания
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor;
//Начать с известной даты...
System.DateTime newDate;
newDate = System.DateTime.Today;
changeDayOfTravel_CustomArrays(ТЕST_CREDIT_CARD, newDate);
//ТОЛЬКО В ЦЕЛЯХ ТЕСТИРОВАНИЯ!!!
//HE СЛЕДУЕТ использовать вызовы сборщика мусора в готовом программном
//коде. Это ЗАМЕДЛЯЕТ работу приложения.
System.GC.Collect();
const int testNumber = 0;
//Запустить таймер теста
PerformanceSampling.StartSample(testNumber, "Custom Array implementation");
//Запустить тест!
for(int testCount = 0; testCount < NUMBER_TEST_ITERATIONS; testCount++) {
//Передвинуть дату вперед на один день
newDate = newDate.AddDays(1);
int numberRecordsChanged = 0;
//Просмотреть все имена, используя СТРОКИ
numberRecordsChanged = changeDayOfTravel_CustomArrays(TEST_CREDIT_CARD, newDate);
//Убедиться в нормальном выполнении теста...
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_CustomArrays(string creditCardNumber, System.DateTime newTravelDate) {
int numberRecordsChanged = 0;
//Просмотреть каждый элемент массива
for (int index = 0; index <= DUMMY_ROWS_OF_DATA; index++) {
string currentCreditCard;
currentCreditCard = m_data_creditCards[index];
//Обновить запись при наличии совпадения
if (creditCardNumber == currentCreditCard) {
//Изменить дату поездки
System.DateTime currentTravelDate = m_data_travelDates[index];
//Увеличить значение счетчика обновлений только при несовпадении данных
if (currentTravelDate != newTravelDate) {
m_data_travelDates[index] = newTravelDate;
numberRecordsChanged++;
}
}
}
//Возвратить количество обновленных записей
return numberRecordsChanged;
}
private void buttonRunTest_Click(object sender, System.EventArgs e) {
createDataSet();
changeDayOfTravel_test();
}
Пример использования базы данных на устройстве и управления пользовательскими даннымиЧтобы проиллюстрировать методы представления и управления пользовательскими данными, считанными из базы данных в память, полезно вернуться к примеру из предыдущей главы. В настоящем примере мы вновь рассмотрим словарную игру, для которой разрабатывали пользовательский интерфейс в главе 13.
Ранее нас интересовали вопросы проектирования пользовательского интерфейса для этого мобильного приложения, а теперь мы будем исследовать хранение и представление в памяти самих слов, образующих словарь. Поскольку словарь, который мы хотели бы использовать для данного мобильного приложения, может оказаться очень большим, то, исходя из соображений быстродействия, эффективности и гибкости приложения, для хранения данных желательно использовать базу данных. По своей природе наши данные предназначены в основном только для чтения; время от времени пользователь может добавлять в словарь новые слова, но динамическое обновление существующих данных не является главным требованием. Кроме того, данные имеют простую структуру и их легко можно представить в виде одной таблицы базы данных.