В настоящее время я испытываю трудности с загрузкой Treeview. Мое приложение имеет центральную панель, в которой загружаются несколько пользовательских элементов управления. Каждый из них получил древовидную структуру из 5 родительских узлов (групп), владеющих десятками дочерних узлов (лиц) с общим количеством 50 узлов. Та же функция загружает древовидную структуру (см. Здесь): Первый цикл добавляет группы, а второй цикл (в первый) добавляет Лица.Медленная загрузка treeview
Эта функция занимает около 10 секунд для загрузки 50 узлов. Это вечность в моем мире.
Не знаю, что делать, чтобы улучшить этот. Пожалуйста, взгляните на эту функцию.
public static List<TreeNode> ArbreCommun(Guid idUser)
{
System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
stopWatch.Start();
List<TreeNode> ArbreParent = new List<TreeNode>();
using (bdd_compactEntities contexte = new bdd_compactEntities())
{
if (contexte.Groupe.Count() > 0)
foreach (Groupe grpItem in contexte.Groupe)
{
if (grpItem.g_nom == "Tous")
{
TreeNode Tous = new TreeNode();
Tous.Text = grpItem.g_nom + " (" + contexte.Personne.Count() + ")";
Tous.Tag = grpItem.id;
Tous.ToolTipText = "ID groupe = " + grpItem.id;
Tous.ImageKey = "group";
Tous.SelectedImageKey = "group";
foreach (Personne pers in FonctionsYou.ChargementPersonnesTous())
{
TreeNode PersonneNode = new TreeNode();
PersonneNode.Text = pers.p_nom + " " + pers.p_prenom;
PersonneNode.Tag = pers.id;
PersonneNode.ToolTipText = "ID personne = " + pers.id;
if (FonctionsYou.HasGroupe(idUser, FonctionsYou.GetGroupeIdPers(pers.id)))
{
if (FonctionsYou.CheckDisponibiliteAthlete(pers.id))
{
PersonneNode.ForeColor = Color.Blue;
PersonneNode.ImageKey = "dispo";
PersonneNode.SelectedImageKey = "dispo";
}
else
{
PersonneNode.ForeColor = Color.Red;
PersonneNode.ImageKey = "blesse";
PersonneNode.SelectedImageKey = "blesse";
}
}
Tous.Nodes.Add(PersonneNode);
}
ArbreParent.Add(Tous);
}
else
{
TreeNode GroupeNode = new TreeNode();
GroupeNode.Text = grpItem.g_nom + " (" + grpItem.Personne.Count() + ")";
GroupeNode.Tag = grpItem.id;
GroupeNode.ToolTipText = "ID groupe = " + grpItem.id;
GroupeNode.ImageKey = "group";
GroupeNode.SelectedImageKey = "group";
if (FonctionsYou.HasGroupe(idUser, grpItem.id))
{
GroupeNode.ForeColor = Color.Green;
}
foreach (Personne pers in contexte.Personne.Where(x => x.Groupe_id == grpItem.id))
{
TreeNode PersonneNode = new TreeNode();
PersonneNode.Text = pers.p_nom + " " + pers.p_prenom;
PersonneNode.Tag = pers.id;
PersonneNode.ToolTipText = "ID personne = " + pers.id;
if (FonctionsYou.HasGroupe(idUser, FonctionsYou.GetGroupeIdPers(pers.id)))
{
if (FonctionsYou.CheckDisponibiliteAthlete(pers.id))
{
PersonneNode.ForeColor = Color.Blue;
PersonneNode.ImageKey = "dispo";
PersonneNode.SelectedImageKey = "dispo";
}
else
{
PersonneNode.ForeColor = Color.Red;
PersonneNode.ImageKey = "blesse";
PersonneNode.SelectedImageKey = "blesse";
}
}
GroupeNode.Nodes.Add(PersonneNode);
}
ArbreParent.Add(GroupeNode);
}
}
}
stopWatch.Stop();
MessageBox.Show(stopWatch.ElapsedMilliseconds + " ms");
return ArbreParent;
}
Вы уверены, что проблема в вас TreeView? Будет ли это намного быстрее, если вы прокомментируете все строки, где вы работаете с узлами, поддерживающими все внешние методы вызова, например. «FonctionsYou.HasGroupe», «FonctionsYou.GetGroupeIdPers» и т. Д.? – pkuderov
Вы на самом деле правы, одна из них выполняет функции замедления sh * t из всего этого ... Я собираюсь это выработать. Благодарим вас за помощь! – You
Спасибо, сэр, мне удалось спуститься с 10 секунд до одной секунды. – You