var form = new MyForm(someargs);
//400 мс
form.ShowDialog();
...
private void myForm_Load(object sender, EventArgs e)
{
//4500 мс после form.ShowDialog() на Windows 2016
}
Между вызовом form.ShowDialog()
и срабатыванием обработчика события Load myForm_Load
проходит:
Железо:
Структура формы.
TableLayoutPanel
c Dock==DockStyle.Fill
. На ней пару десятков TextBox
, ComboBox
, Label
и т.п. Ещё две Button
, и по одному TabControl
и DataGridView
. И пара экземпляров наследника UserControl.
Свойство DoubleBuffered
формы равно true
, пробовал false
скорость не изменилась
Что там так долго происходит? Что можно проверить?
Код обработчиков событий формы и пользовательских элементов управления, был отпрофилирован самописным профилировщиком на основе StopWatch. Удалось установить, что задержка возникает в два этапа. Каждый раз она возникает перед вызовом сеттера пользовательского свойства SelectedValue
элемента управления.
Кстати это свойство помечено, как bindable для класса с помощью [System.ComponentModel.DefaultBindingProperty("SelectedValue")]
. Но что именно тратит время так и не известно.
Найден виновник тормозов. Это ComboBox
с очень большим количеством элементов в DataSource. Теперь у меня есть МСВП:
...
private void button1_Click(object sender, EventArgs e)
{
var form = new MyForm(); // 76мс 2008R2; 123мс 2016
form.ShowDialog(); //1820мс 2008R2;12440мс 2016
}
}
public class MyForm : Form
{
private readonly ComboBox myComboBox = new ComboBox();
public MyForm()
{
var manyItems = Enumerable.Range(1, 66_000)
.Select(t => new
{
Key = t,
Value1 = t.ToString(),
Value2 = t.ToString() + t.ToString()
})
.ToList();
myComboBox.DataSource = manyItems;
myComboBox.ValueMember = "Key";
myComboBox.DisplayMember = "Value2";
this.Controls.Add(myComboBox);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
подскажите пожалуйста как вывести в консоль количество пар, а не их имя?
ПосоветуйтеИмею приложение с БД SQLite, в БД хранятся события
Всем здравствуйте, встала проблема, в моем приложении в датагрид есть данные, при клике на строку я открываю новое окно, но как сделать правильно...