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

на главную - закладки

Жанры

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

Салмре Иво

Шрифт:

}

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

//Код для кнопки "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%

Из табл. 11.1 видно, что экономия времени, достигаемая за счет окружения кода, предназначенного для добавления в элемент управления TreeView и исключения из него данных, вызовами методов BeginUpdate и EndUpdate, составила примерно две трети (68,78%). Наряду с этим, благодаря тому, что мерцание элементов управления вследствие их обновления происходит реже, повышается и привлекательность интерфейса, оцениваемая с позиций конечного пользователя. Использование метода AddRange (столбец "Использование массива") для заполнения данными элемента управления TreeView позволило уменьшить накладные расходы еще на 5%; это улучшение также является ощутимым.

Было довольно-таки неожиданно обнаружить, что использование пары вызовов BeginUpdate и EndUpdate привело не только к значительному увеличению скорости добавления данных в элемент управления TreeView, но и оказало достаточно сильное влияние на скорость их удаления. Результаты, полученные с использованием двух различных подходов для удаления данных из элемента управления TreeView, сравниваются в табл. 11.2.

Таблица 11.2. Очистка 800 элементов данных (время в секундах)

Номер теста Не оптимизированный подход Использование методов BeginUpdate/EndUpdate
1 18,791 8,656
2 15,910 8,964
3 16,821 8,516
Среднее 17,174 8,712
Экономия времени по сравнению с базовым значением Базовое значение (0 %) 49,27 %

Как видно из табл. 11.2, одного лишь окружения кода, предназначенного для удаления данных из элемента управления TreeView, вызовами методов BeginUpdate и EndUpdate оказалось достаточным для того, чтобы достигнуть 50%-ной экономии времени.

Поделиться:
Популярные книги

Агенты ВКС

Вайс Александр
3. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Агенты ВКС

Контртеррор

Валериев Игорь
6. Ермак
Фантастика:
альтернативная история
5.00
рейтинг книги
Контртеррор

Древесный маг Орловского княжества

Павлов Игорь Васильевич
1. Орловское княжество
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества

Тринадцатый X

NikL
10. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Тринадцатый X

Убийца

Бубела Олег Николаевич
3. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Убийца

Черный маг императора 3

Герда Александр
3. Черный маг императора
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора 3

Князь Андер Арес 3

Грехов Тимофей
3. Андер Арес
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Князь Андер Арес 3

Снега

Чепурин Юлий Петрович
Поэзия:
драматургия
5.00
рейтинг книги
Снега

Новые горизонты

Лисина Александра
5. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Новые горизонты

#Бояръ-Аниме. Газлайтер. Том 13

Володин Григорий Григорьевич
13. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
фэнтези
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 13

Страж Кодекса. Книга V

Романов Илья Николаевич
5. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга V

Эфемер

Прокофьев Роман Юрьевич
7. Стеллар
Фантастика:
боевая фантастика
рпг
7.23
рейтинг книги
Эфемер

Бастард Императора. Том 3

Орлов Андрей Юрьевич
3. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 3

Распутье

Басаргин Иван Ульянович
Сибириада
Проза:
военная проза
историческая проза
5.00
рейтинг книги
Распутье