2

只是为了了解最佳实践或代码效率,我有这段代码:

请注意:我使用的是 .Net Compact Framework。

protected override void OnPaint(PaintEventArgs e)
{
    if (BmpScreen == null)
    {
      BmpScreen = new Bitmap(ClientRectangle.Width, ClientRectangle.Height);
    }

    using (Graphics gBmpScreen = Graphics.FromImage(BmpScreen))
    {
         // some drawing using gBmpScreen
    }
    // finally
    e.Graphics.DrawImage(BmpScreen, 0, 0);
}

在方法中的这段代码中,PaintGraphics 每次都创建一个对象,

我的问题是这样做更好还是在开始时只创建一次图形对象更好?

4

1 回答 1

0

我不确定性能差异,但我建议在 OnResize 中分配和处置您的后台缓冲区 Bitmap 和 Graphics 对象。我发现对于大多数自定义控件,您可以将更新后台缓冲区的实际工作尽可能地与数据更改发生的位置分开,并将 OnPaint 简化为仅将后台缓冲区位图 blit 到系统的图形。这对于我编写的自定义图形控件很有效,因为数据不会随着用户交互而改变。它包含在手势滚动控件中,并大大改进了滚动动画。但是您可以通过调用 Update() 来响应用户交互更改以强制 OnPaint 在您的处理程序范围内,从而扩展该模式以处理更多交互控件。

于 2012-08-02T15:51:08.203 回答