Дикие тормоза при сортировке в TreeVie
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.03.05 21:10
Оценка: 6 (1)
Писал тут тесты к статье и оказалось, что встроенные в TreeView средства сортировки дико тормозят.

Если использовать только встроенную сортировку по строкам (ххх.Sorted = false), то еще куда не шло (хотя тоже мало пригодно для больших деревьев).

Если же воспользоваться возможностью подключения внешнего компарера (xxx.TreeViewNodeSorter = new MyComparer()), то жутчайшие тормоза начинаются на совсем смешных объемах.

Причем ручная реализация сортировки робатает даже значительно быстрее нежели встроенная. Причем код имеет смехотворный размер:
/// <summary>
/// Рекурсивная сортировка веток TreeView.
/// </summary>
/// <param name="rootNodes">Коллекция веток подлежащая сортировке</param>
private static void SortTreeNodes(
    TreeNodeCollection rootNodes,
    IComparer<TreeNode> comparer)
{
    int count = rootNodes.Count;
    if (count == 0)
        return;

    // Копируем содержимое коллекции подветок в массив,
    // сортируем этот массв, очищаем коллекцию и копируем 
    // подвекти обратно в коллекцию.
    TreeNode[] nodeArray = new TreeNode[count];
    rootNodes.CopyTo(nodeArray, 0);
    Array.Sort<TreeNode>(nodeArray, comparer);
    rootNodes.Clear();
    rootNodes.AddRange(nodeArray);

    // Сортируем все подветки
    foreach (TreeNode node in nodeArray)
        SortTreeNodes(node.Nodes, comparer);
}

В общем, дарю идею и надеюсь, что информация дойдет до тех кто занимается ВинФормсами.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.