При большом количестве веток дерева, у меня начинает тормозить TreeView, а точнее, обычная операция присвоения имени ветки:
treeView1.SelectedNode.Text = "hello!";
Тестирую на разных компьютерах. Эта операция может занимать от 100 мс до 1 сек при 35 тыс веток. Если больше, то время пропорционально увеличивается. Можно ли решить эту проблему?
Это известная проблема всех UI элементов. Собственно снижение производительности с увеличением числа элементов, в первую очередь связано с тем, что отрисовка и обработка другой логики всех UI элементов выполняется в одном потоке (по этой же причине не рекомендуется в логике контролов лазить за данными в БД или выполнять тяжелые вычисления). При этом надо учитывать, что одна из самых тяжелых операций, при нормальном использовании контролов, - отрисовка, выполняется даже для тех элементов, которые в данный момент не отображаются (находятся за границами родительского контрола при скроле или, как в случае с TreeView, "свернуты" под "плюсик"). Таким образом, не важно как вы разместите N тысяч UI элементов, в видимой области формы, спрячете за скролом или TreeView - "тормозить" будет абсолютно одинаково - пропорционально их количеству.
Решение тоже известное - виртуализация отображения.
Применительно к TreeView, это можно реализовать например так:
Это конечно увеличит время выполнения разворачивания и сворачивания узлов, но заметно прибавит производительности при большом количестве элементов. Исключительный случай, в котором данный прием не сработает - все узлы на одном уровне. Но это скорее вырожденный случай и потребуется менять способ их отображения.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Создал новый Appdomain,загрузил в него сборкуТеперь нужно вызвать код из метода в в основном Appdomain
Подскажите, как удалить определенные строки в базе данных, если они просрочились на 1 день
Данный код возвращает 0, хотя по документации должен возвращать -1Я что-то не правильно делаю? Версия