Тайна производительности WinForms: производное управление PictureBox медленнее, чем оригинальное? - PullRequest
3 голосов
/ 28 января 2010

В моем проекте .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

1 Ответ

1 голос
/ 28 января 2010

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

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

...