У меня проблема с производительностью. Я создаю 100 новых кнопок, и я хочу назначить обработчик событий Click. Я выполняю этот код примерно 100 раз:
Buttons[i].Button.Click += new System.EventHandler(Button_Click);
Это займет около 2 секунд. У меня есть много других назначений событий в одной и той же функции, но все они выполняют только одну миллисекунду для выполнения. Поэтому я преобразовал свой код в
Buttons[i].Button.MouseUp += new System.Windows.Forms.MouseEventHandler(Button_Click);
Теперь код быстрый (некоторые миллисекунды, как и другие). Очевидно, что я изменил параметры функции "Button_click", чтобы соответствовать новым требованиям к событию, но никаких других изменений не было.
Мне интересно, почему это может произойти. Неужели EventHandler замедлился? Или я делаю что-то неправильно? Или есть лучшая практика?
Я использую VC2010 с С#, используя .NET 4 в приложении Windows Form.
EDIT:
Теперь я "уменьшил" свой код, и я положил его туда:
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
Button b;
for(n=0;n<100;n++)
{
b = new Button();
b.Location = new System.Drawing.Point(100, 0);
b.Name = "btnGrid";
b.Size = new System.Drawing.Size(50, 50);
b.Text = b.Name;
b.UseVisualStyleBackColor = true;
b.Visible = false;
b.Text = "..";
b.Click += new EventHandler(this.Button_Click);
//b.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Button_ClickUP);
}
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
Log(elapsedTime, Color.Purple);
Button_Click и Button_Click:
private void Button_Click(object sender, EventArgs e)
{
}
private void Button_ClickUP(object sender, MouseEventArgs e)
{
}
Я помещаю этот код в кнопку, и функция "Журнал" отображает результат в памятке. Когда я включаю "Click", результат составляет 01.05 сек, но когда я включаю "MouseUp", результат равен 00.00.
Разница → ОДИН ВТОРОЙ!
почему!?
== EDIT ==
Я использую .NET Framework 4. VS2010. Выиграйте XP. Я нашел это: , если я использую .NET 3.5 или ниже скорость изменения: 0.5 сек. Половина. Если я компилирую в режиме отладки или выпуска, он не изменяется.
Если я использую исполняемый файл без отладчика, он быстро вспыхивает.
Итак, я меняю свой вопрос:.NET 4 медленнее, чем .NET 3? Почему режим Release работает по-другому по сравнению с автономной версией?
Большое спасибо.