【问题标题】:WinForms performance mystery: derived PictureBox control slower than the original?WinForms性能之谜:派生PictureBox控件比原来慢?
【发布时间】:2011-01-10 05:20:33
【问题描述】:

在我的 .NET 2.0 项目中,我创建了一个空的 System.Windows.Forms.PictureBox 派生类:

public class NewPictureBox : PictureBox
{
    //absolutely nothing 
}

然后我做了以下事情:

  1. 将派生控件和基本控件的Image 属性设置为相当大的图像(800x600),SizeModeNormal(仅显示左上部分);
  2. 连接了几个NewPictureBoxPictureBox 的事件,以便在表面上拖动鼠标时可以绘制一个选择框;
  3. 进行设置,以便选择框的属性 (Width/Height) 将在 NumericUpDown 控件上实时更新。

问题是在派生 PB 上真正快速拖动鼠标时,与在基本 PB 上执行相同操作相比,存在相当大的“断断续续”。 Width/Height 值不会实时更新。

有人知道为什么会这样吗?如何使用派生控件实现相同的平滑度?谢谢!

对于希望查看具有所描述问题的最小示例项目的任何人:

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

【问题讨论】:

  • 我无法重现这一点:我的无所事事派生的 PictureBox 和基本的一样快(如您所料)。您能否提供任何进一步的信息或包含挂钩事件的最小完整示例?
  • 您好,我上传了一个最小的示例项目,如果您能研究一下就太好了。谢谢!

标签: c# winforms performance picturebox


【解决方案1】:

通过 PB 调整图像大小以适应控件非常昂贵。 GDI+ 有一个非常好的过滤器,但它不是免费提供的。在将图像分配给 Image 属性之前自行调整图像大小,这样 PB 就不必调整它的大小。

使用使用 Format32bppPArgb 创建的位图也可以产生巨大的不同,它比任何其他格式快 10 倍。

【讨论】:

  • 您的意思是剪切图像吗?或者像缩放一样调整图像大小?无论哪种方式,我都无法弄清楚为什么一个空的派生类会导致如此不同的行为。不过感谢您的提示,我一定会尝试一下。
  • 不,调整它的大小,和 PB 一样。这个问题肯定不是是派生类引起的,只是WF不是这样工作的。
  • 在我的示例中,我将 SizeMode 设置为 Normal,因此只显示图片的左上角。但我听从了你的建议,将 Image 属性设置为预先剪切的位图,它确实有所改善!仍然为什么基础控件和不做任何新的派生控件之间的区别首先是?
猜你喜欢
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多