У меня проблемы с производительностью. Я создаю 100 новых кнопок и хочу назначить обработчик событий щелчка. Я выполняю этот код около 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 с C #, используя .NET 4 в приложении Windows Form.
РЕДАКТИРОВАТЬ:
Теперь я "уменьшил" свой код и поместил его туда:
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)
{
}
Я вставляю этот код в кнопку, и функция «Журнал» отображает результат в виде заметки. Когда я включаю «Щелчок», результат составляет 01,05 секунды, но когда я включаю «MouseUp», результат будет 00,00.
Разница -> ОДНА СЕКУНДА!
почему!?
== EDIT ==
Я использую .NET Framework 4. VS2010. Win XP. Я нашел это: , если я использую .NET 3.5 или ниже, скорость меняется: 0,5 сек. Половина . Если я компилирую в режиме отладки или выпуска, он не меняется.
Если я использую исполняемый файл без отладчика, он работает очень быстро.
Я меняю свой вопрос: .NET 4 медленнее, чем .NET 3? Почему режим выпуска работает иначе, чем автономная версия?
Большое спасибо.