У меня есть пользовательский элемент управления, содержащий 2-столбец TableLayoutPanel и принимающий команды для динамического добавления строк для отображения сведений об элементе, выбранном в отдельном элементе управления. Таким образом, пользователь выберет строку в другом элементе управления (DataGridView), и в обработчике событий SelectedItemChanged для DataGridView я очищаю элемент управления detail и затем заново создаю все строки для нового выбранного элемента (который может иметь совершенно разные детали отобразить из ранее выбранного элемента). Это прекрасно работает некоторое время. Но если я продолжаю переходить от одного выбранного элемента к другому в течение достаточно долгого времени, обновления становятся ОЧЕНЬ медленными (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;
}
Я не использую ничего, кроме меток (и очень редко TextBox) внутри TableLayoutPanel, и я добавляю Labels и TextBoxes в список элементов управления (на которые ссылается DisposeAndClearControls ()) при их создании. Я попытался просто перебрать detailTable.Controls и утилизировать их таким образом, но, похоже, он пропустил половину элементов управления (определяемых путем перехода через него в отладчике). Таким образом, я знаю, что получаю их все.
Меня заинтересуют любые предложения по улучшению производительности при рисовании, но особенно то, что вызывает ухудшение при множественном выборе.