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 | Использование массива |
|---|---|---|---|
| 1 | 40,785 | 12,484 | 10,388 |
| 2 | 40,533 | 12,322 | 10,419 |
| 3 | 40,878 | 13,343 | 11,686 |
| Среднее | 40,732 | 12,716 | 10,831 |
| Экономия времени по сравнению с базовым значением | Базовое значение (0%) | 68,78% | 73,41% |