treeView1.EndUpdate;

 //Остановить таймер и отобразить результат

 PerformanceSampling.StopSample(2);

 System.Windows.Forms.MessageBox.Show(PerformanceSampling.GetSampleDurationText(2));

}

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

//Код для кнопки "Clear: BeginUpdate"

//Подход, в котором используется метод BeginUpdate

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

private void UseBeginEndUpdateForClear_Click(object sender, System.EventArgs e) {

 //Для повышения корректности тестирования предварительно выполнить

 //операцию сборки мусора

 System.GC.Collect;

 //Запустить таймер

 PerformanceSampling.StartSample(3, "Clear - Use BeginUpdate");

 treeView1.BeginUpdate;

 treeView1.Nodes.Clear;

 treeView1.EndUpdate;

 //Остановить таймер и отобразить результат

 PerformanceSampling.StopSample(3);

 System.Windows.Forms.MessageBox.Show(PerformanceSampling.GetSampleDurationText(3));

}

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

//Код для кнопки "Fill: Use Array"

//

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

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

private void FillArrayBeforeAttachingToTree_Click(object sender, System.EventArgs e) {

 //Очистить массив для создания одинаковых условий тестирования

 if (treeView1.Nodes.Count > 0) {

  treeView1.BeginUpdate;

  treeView1.Nodes.Clear;

  treeView1.EndUpdate;

  treeView1.Update;

 }

 //Для повышения корректности тестирования предварительно выполнить

 //операцию сборки мусора

 System.GC.Collect;

 //Запустить таймер

 PerformanceSampling.StartSample(4, "Populate - Use Array");

 //Распределить память для нашего массива узлов дерева

 System.Windows.Forms.TreeNode [] newTreeNodes = new System.Windows.Forms.TreeNode[NUMBER_ITEMS];

 //Заполнить массив

 for(int i = 0; i < NUMBER_ITEMS; i++) {

  newTreeNodes[i] = newSystem.Windows.Forms.TreeNode("TreeItem" + i.ToString);

 }

 //Связать массив с элементом управления

 TreeView treeView1.BeginUpdate;

 treeView1.Nodes.AddRange(newTreeNodes);

 treeView1.EndUpdate;

 //Остановить таймер и отобразить результат

 PerformanceSampling.StopSample(4);

 System.Windows.Forms.MessageBox.Show(PerformanceSampling.GetSampleDurationText(4));

}

Результаты, полученные с использованием различных методик добавления данных в элемент управления TreeView и их исключения из него, приведены в таблицах 11.1 и 11.2.

Таблица 11.1. Физическое устройство Pocket PC: добавление 800 элементов данных (время в секундах)

Номер тестаНе оптимизированный подходИспользование методов BeginUpdate/EndUpdateИспользование массива
140,78512,48410,388
240,53312,32210,419
340,87813,34311,686
Среднее40,73212,71610,831
Экономия времени по сравнению с базовым значениемБазовое значение (0%)68,78%73,41%
Перейти на страницу:

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