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

Листинг 11.1. Заполнение данными и очистка от них элементов управления TreeView с использованием альтернативных стратегий

Листинг 11.1. Заполнение данными и очистка от них элементов управления TreeView с использованием альтернативных стратегий

'----------------------------------------------------------------------------
'Примечание #1: В этом примере используется класс PerformanceSampling,
' определённый ранее в данной книге. Убедитесь в том, что
' вы включили этот класс в свой проект.
'Примечание #2: Этот код необходимо включить в класс Form, содержащий элемент
 ' управления TreeView и кнопки Button, к которым подключены
' приведенные ниже функции xxx_Click.
'----------------------------------------------------------------------------
'Количество элементов, которые необходимо поместить в элемент
'управления TreeView
Const NUMBER_ITEMS As Integer = 800
'-------------------------------------------------------------------------
'Код для кнопки "Fill: Baseline"
'Использование неоптимизированного подхода для заполнения данными элемента
'управления TreeView
'-------------------------------------------------------------------------
Private Sub UnOptimizedFill_Click(ByVal sender As _
 System.Object, ByVal e As System.EventArgs) _
 Handles UnOptimizedFill.Click
 'Очистить массив для создания одинаковых условий тестирования
 If (TreeView1.Nodes.Count > 0) Then
  TreeView1.BeginUpdate()
  TreeView1.Nodes.Clear()
  TreeView1.EndUpdate()
  TreeView1.Update()
 End If
 'Для повышения корректности тестирования предварительно выполнить
 'операцию сборки мусора. В реальных кодах этого делать не следует!
 System.GC.Collect()
 'Запустить таймер
 PerformanceSampling.StartSample(0, "TreeViewPopulate")
 'Заполнить данными элемент управления TreeView
 Dim i As Integer
 For i = 1 To NUMBER_ITEMS
  TreeView1.Nodes.Add("TreeItem" + CStr(i))
 Next
 'Остановить таймер и отобразить результат
 PerformanceSampling.StopSample(0)
 MsgBox(PerformanceSampling.GetSampleDurationText(0))
End Sub
'-------------------------------------------------------------------------
'Код для кнопки "Clear: Baseline"
'Использование неоптимизированного подхода для заполнения данными элемента
'управления TreeView
'-------------------------------------------------------------------------
Private Sub UnOptimizedClear_Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles UnOptimizedClear.Click
 'Для повышения корректности тестирования предварительно выполнить
 'операцию сборки мусора
 System.GC.Collect()
 'Запустить таймер
 PerformanceSampling.StartSample(1, "TreeViewClear")
 TreeView1.Nodes.Clear()
 PerformanceSampling.StopSample(1)
 MsgBox(PerformanceSampling.GetSampleDurationText(1))
End Sub
'--------------------------------------------------
'Код для кнопки "Fill: BeginUpdate"
'Подход, в котором используется метод BeginUpdate()
'--------------------------------------------------
Private Sub UseBeginEndUpdateForFill_Click(ByVal sender As _
 System.Object, ByVal e As System.EventArgs) _
 Handles UseBeginEndUpdateForFill.Click
 'Очистить массив для создания одинаковых условий тестирования
 If (TreeView1.Nodes.Count > 0) Then
  TreeView1.BeginUpdate()
  TreeView1.Nodes.Clear()
  TreeView1.EndUpdate()
  TreeView1.Update()
 End If
 'Для повышения корректности тестирования предварительно выполнить
 'операцию сборки мусора. В РЕАЛЬНЫХ КОДАХ ЭТОГО ДЕЛАТЬ НЕ СЛЕДУЕТ!
 System.GC.Collect()
 'Запустить таймер
 PerformanceSampling.StartSample(2, _
  "Populate - Use BeginUpdate")
 'Заполнить данными элемент управления TreeView
 TreeView1.BeginUpdate()
 Dim i As Integer
 For i = 1 To NUMBER_ITEMS
  TreeView1.Nodes.Add("TreeItem" + i.ToString())
 Next
 TreeView1.EndUpdate()
 'Остановить таймер и отобразить результат
 PerformanceSampling.StopSample(2)
 MsgBox(PerformanceSampling.GetSampleDurationText(2))
End Sub
'--------------------------------------------------
'Код для кнопки "Clear: BeginUpdate"
'Подход, в котором используется метод BeginUpdate()
'--------------------------------------------------
Private Sub UseBeginEndUpdateForClear_Click(ByVal sender As _
 System.Object, ByVal e As System.EventArgs) _
 Handles UseBeginEndUpdateForClear.Click
 'Для повышения корректности тестирования предварительно выполнить
 'операцию сборки мусора. В РЕАЛЬНЫХ КОДАХ ЭТОГО ДЕЛАТЬ НЕ СЛЕДУЕТ!
 System.GC.Collect()
 'Запустить таймер
 PerformanceSampling.StartSample(3, "Clear - Use BeginUpdate")
 TreeView1.BeginUpdate()
 TreeView1.Nodes.Clear()
 TreeView1.EndUpdate()
 'Остановить таймер и отобразить результат
 PerformanceSampling.StopSample(3)
 MsgBox(PerformanceSampling.GetSampleDurationText(3))
End Sub
'-------------------------------------
'Код для кнопки "Fill: Use Array"
'Подход, в котором используется массив
'-------------------------------------
Private Sub FillArrayBeforeAttachingToTree_Click(ByVal _
 sender As System.Object, ByVal e As System.EventArgs) _
 Handles FillArrayBeforeAttachingToTree.Click
 'Очистить массив для создания одинаковых условий тестирования
 If (TreeView1.Nodes.Count > 0) Then
  TreeView1.BeginUpdate()
  TreeView1.Nodes.Clear()
  TreeView1.EndUpdate()
  TreeView1.Update()
 End If
 'Для повышения корректности тестирования предварительно выполнить
 'операцию сборки мусора. В РЕАЛЬНЫХ КОДАХ ЭТОГО ДЕЛАТЬ НЕ СЛЕДУЕТ!
 System.GC.Collect()
 'Запустить таймер
 PerformanceSampling.StartSample(4, "Populate - Use Array")
 'Распределить память для нашего массива узлов дерева
 Dim newTreeNodes() As System.Windows.Forms.TreeNode
 ReDim newTreeNodes(NUMBER_ITEMS - 1)
 'Заполнить массив
 Dim i As Integer
 For i = 0 To NUMBER_ITEMS - 1
  newTreeNodes(i) = _
   New System.Windows.Forms.TreeNode("TreeItem" + _
   i.ToString())
 Next
 'Связать массив с элементом управления TreeView
 TreeView1.BeginUpdate()
 TreeView1.Nodes.AddRange(newTreeNodes)
 TreeView1.EndUpdate()
 'Остановить таймер и отобразить результат
 PerformanceSampling.StopSample(4)
 MsgBox(PerformanceSampling.GetSampleDurationText(4))
End Sub

Оглавление книги

Оглавление статьи/книги

Генерация: 4.287. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз