powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите почему сортировка в List<> делается в 50 раз и более быстрей чем в TreeView
10 сообщений из 10, страница 1 из 1
Подскажите почему сортировка в List<> делается в 50 раз и более быстрей чем в TreeView
    #39243421
AlexanP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ подскажите почему сортировка в List<> делается в 50 раз и более быстрей чем в TreeView ?
В list и tree одинаковые 10000 элементов.
Делается List.Sort() (-около 60мс) и TreeView.Sort() (около 3600мс) c одинаковыми компараторами.
Компараторы специально сделаны полностью одинаковыми.


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
using System.Diagnostics;
using System;
using System.Collections.Generic;
using System.Collections;
using System.Windows.Forms;
using System.Threading;

namespace List
{
    class Program
    {
        public class comp_list : IComparer<string>
          {
              public int Compare(string xx, string yy) { string x = xx.ToString(); string y = yy.ToString();  return x.CompareTo(y);  } 
          }
        public class comp_tree : IComparer
          {
              public int Compare(object xx, object yy) { string x = xx.ToString(); string y = yy.ToString();  return x.CompareTo(y); }
          }
      

        static void Main()
        {

            List<string> MyList = new List<string>();
            TreeView tv = new TreeView();

            int Cnt = 10000;
            string s="";
            Random R = new Random();
            for (int i=0; i<Cnt; i++) 
              {
                s=(R.Next(0,Cnt)).ToString();
                MyList.Add( s );
                tv.Nodes.Add( s );
              }

            Stopwatch t = new Stopwatch();  t.Start();             
            comp_list cmp = new comp_list(); 
            MyList.Sort( cmp );  // СОРТИРОВКА LIST
            t.Stop();  Console.WriteLine("SORT_LIST={0}",t.ElapsedMilliseconds);

            tv.TreeViewNodeSorter= new comp_tree();
            Stopwatch tt = new Stopwatch();  tt.Start();             
            tv.Sort();   // СОРТИРОВКА TREE
            tt.Stop();  Console.WriteLine("SORT_TREE={0}",tt.ElapsedMilliseconds);
        }
    }
}
...
Рейтинг: 0 / 0
Подскажите почему сортировка в List<> делается в 50 раз и более быстрей чем в TreeView
    #39243435
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ничего, что Tree вью это иерархия, а List<> список?
...
Рейтинг: 0 / 0
Подскажите почему сортировка в List<> делается в 50 раз и более быстрей чем в TreeView
    #39243438
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
List<> это массив.
...
Рейтинг: 0 / 0
Подскажите почему сортировка в List<> делается в 50 раз и более быстрей чем в TreeView
    #39243457
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, у TreeView кишок по-более, чем у листа
...
Рейтинг: 0 / 0
Подскажите почему сортировка в List<> делается в 50 раз и более быстрей чем в TreeView
    #39243485
AlexanP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtesничего, что Tree вью это иерархия, а List<> список?
А я в примере не иерархию делаю, а именно список.
...
Рейтинг: 0 / 0
Подскажите почему сортировка в List<> делается в 50 раз и более быстрей чем в TreeView
    #39243490
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тривью это визуальный элемент управления, а List<> это невизуальный объект. намек понятен?
...
Рейтинг: 0 / 0
Подскажите почему сортировка в List<> делается в 50 раз и более быстрей чем в TreeView
    #39243507
AlexanP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariyтривью это визуальный элемент управления, а List<> это невизуальный объект. намек понятен?
Непонятен. То что класс treeview может отображаться, еще не значит, что внутренние члены (типа коллекций) должны зависеть от этого...
...
Рейтинг: 0 / 0
Подскажите почему сортировка в List<> делается в 50 раз и более быстрей чем в TreeView
    #39243512
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создай свой класс, наследованный от List<List<T>> и будет тебе счастье
...
Рейтинг: 0 / 0
Подскажите почему сортировка в List<> делается в 50 раз и более быстрей чем в TreeView
    #39243594
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexanPAntonariyтривью это визуальный элемент управления, а List<> это невизуальный объект. намек понятен?
Непонятен. То что класс treeview может отображаться, еще не значит, что внутренние члены (типа коллекций) должны зависеть от этого...
Значит. У визуальных элементов методы синхронизированы для кросспоточных вызовов, плюс инициируют события. А у List<T>.Sort внутри банальный Array.Sort, который в лучшем случае O (n logn), в худшем - O (n ^ 2). Если сомневаетесь в вышеизложенном - курите исходники: List<T>.Sort , TreeView.Sort .
...
Рейтинг: 0 / 0
Подскажите почему сортировка в List<> делается в 50 раз и более быстрей чем в TreeView
    #39243698
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexanPКомпараторы специально сделаны полностью одинаковыми.

Да ладно!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите почему сортировка в List<> делается в 50 раз и более быстрей чем в TreeView
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]