Производительность обработчика событий

У меня проблемы с производительностью. Я создаю 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? Почему режим выпуска работает иначе, чем автономная версия?

Большое спасибо.

13
задан Redax 13 May 2011 в 07:23
поделиться