Проблемы с производительностью при использовании нескольких пользовательских элементов управления в TableLayoutPanel в WC#

Место общения программистов C#
Anonymous
Проблемы с производительностью при использовании нескольких пользовательских элементов управления в TableLayoutPanel в W

Сообщение Anonymous »

В настоящее время я разрабатываю приложение WinForms и сталкиваюсь с проблемами производительности при динамическом добавлении нескольких экземпляров UserControl в TableLayoutPanel. В частности, у меня есть около 141 экземпляра пользовательского элемента управления, который мне нужно отобразить на панели.
Вот упрощенная версия моего кода:

Код: Выделить всё

public void FillPanel()
{
panel.Controls.Clear();
panel.SuspendLayout();

foreach (var group in )
{
Label groupLabel = new Label
{
Text = $"FlowLayoutPanel Items",
Location = new Point(0, currentY),
AutoSize = true
};

panel.Controls.Add(groupLabel);
currentY += groupLabel.Height ;

FlowLayoutPanel flowPanel = new FlowLayoutPanel
{
FlowDirection = FlowDirection.LeftToRight,
Location = new Point(0, currentY),
Size = new Size(panel.Width, CalculateHeight()),
AutoSize = false,
WrapContents = true
};

foreach (var item in group)
{
var myUserControlPanel = new myUserControlPanel(item);
flowPanel.Controls.Add(myUserControlPanel);
}

panel.Controls.Add(flowPanel);
currentY += flowPanel.Height + 10;
}

panel.AutoScroll = true;
panel.ResumeLayout();
}
Существует около 141 элемента управления (myUserControlPanel), который можно добавить как минимум к 5 панелям FlowLayoutPanel (~ 25 для каждого).
Я уже пробовал:
-DoubleBuffering-Добавьте myUserControlPanel в List и затем один раз в Panel.Controls.Add(listToAdd.ToArray());
Метод FillPanel() выполняет все свои задачи за 50 мс. После этого установка для свойства Visible формы значения true займет дополнительные 5 секунд для отображения формы и всех ее элементов управления.
Существует ли лучшая стратегия макета, которая повысила бы производительность?

Подробнее здесь: https://stackoverflow.com/questions/790 ... n-winforms

Вернуться в «C#»