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