Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Тайна производительности WinForms: производный элемент управления PictureBox медленнее, чем оригинал?

Автор вопроса: Dan7Ответов: 1

В моем проекте .NET 2.0 я создал пустой производный класс System.Windows.Forms.PictureBox:

public class NewPictureBox : PictureBox
{
    //absolutely nothing
}

Затем я сделал следующее:

  1. установите для свойства Image производного и базового элементов управления довольно большое изображение (800x600), SizeMode равно Normal (отображается только верхняя левая часть);
  2. подключил несколько событий NewPictureBox и PictureBox, чтобы окно выбора можно было нарисовать при перетаскивании мыши по поверхности;
  3. настройте его так, чтобы свойства поля выбора (Width/Height) обновлялись в NumericUpDown элементах управления в режиме реального времени.

Проблема заключается в том, что при очень быстром перетаскивании мыши на производном PB наблюдается значительная "прерывистость" по сравнению с выполнением того же на базовом PB. Значения Width/Height не обновляются в режиме реального времени.

Кто-нибудь знает, почему это так? Как добиться такой же гладкости с производным элементом управления? Спасибо!

Для всех, кто хочет проверить минимальный пример проекта с описанной проблемой:

http://www.mediafire.com/?i2nq2tmmjzx

  • Я не мог воспроизвести это: мой производный PictureBox работал так же быстро, как и базовый (как и следовало ожидать). Можете ли вы предоставить дополнительную информацию или минимальный полный образец, включая перехваченные события? itowlson 28.01.2010
  • Привет, я загрузил минимальный образец проекта, было бы здорово, если бы вы могли его изучить. Спасибо! Dan7 28.01.2010

performancewinformspicturebox

Ответы

Ответ 1 · рейтинг 1 · Hans Passant

Получение изображения, измененного с помощью PB, чтобы оно соответствовало элементу управления, очень дорого. В GDI+ есть очень хороший фильтр, но он не бесплатный. Измените размер изображения самостоятельно, прежде чем назначать его свойству Image, чтобы PB не приходилось изменять его размер.

Использование растрового изображения, созданного с помощью Format32bppPArgb, также может иметь большое значение, оно в 10 раз быстрее, чем любой другой формат.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы