У меня есть пользовательский элемент управления, который содержит TableLayoutPanel с двумя столбцами и принимает команды для динамического добавления строк для отображения сведений об элементе, выбранном в отдельном элементе управления. Итак, пользователь выберет строку в другом элементе управления (DataGridView), а в обработчике событий SelectedItemChanged для DataGridView я очищаю элемент управления подробностями, а затем повторно создаю все строки для нового выбранного элемента (который может иметь совершенно разные детали отображение из ранее выбранного элемента). Какое-то время это прекрасно работает. Но если я продолжаю переходить от одного выбранного элемента к другому в течение довольно долгого времени, обновления становятся ОЧЕНЬ медленными (3-5 секунд каждое). Это звучит так, будто я не все утилизирую должным образом, но я не могу понять, что мне не хватает. Вот мой код для очистки TableLayoutPanel:
private readonly List<Control> controls;
public void Clear()
{
detailTable.Visible = false;
detailTable.SuspendLayout();
SuspendLayout();
detailTable.RowStyles.Clear();
detailTable.Controls.Clear();
DisposeAndClearControls();
detailTable.RowCount = 0;
detailTable.ColumnCount = 2;
}
private void DisposeAndClearControls()
{
foreach (Control control in controls)
{
control.Dispose();
}
controls.Clear();
}
И как только я завершу загрузку всех элементов управления, которые мне нужны, в TableLayoutPanel для следующего отображения подробностей, вот что я называю:
public void Render()
{
detailTable.ResumeLayout(false);
detailTable.PerformLayout();
ResumeLayout(false);
detailTable.Visible = true;
}
Я не использую ничего, кроме меток (и очень редко текстовых полей) внутри TableLayoutPanel, и я добавляю метки и текстовые поля в список элементов управления (на которые есть ссылка в DisposeAndClearControls ()), когда я их создаю. Я попытался просто перебрать detailTable.Controls и удалить их таким образом, но, похоже, упустил половину элементов управления (определено путем пошагового выполнения в отладчике). Таким образом, я знаю, что получаю их все.
Мне были бы интересны любые предложения по повышению производительности рисования, но особенно то, что вызывает ухудшение при множественном выборе.