为了了解最佳实践或代码效率,我正在使用这段代码:
请注意:我使用的是.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);
}
在Paint
方法的这段代码中,我每次都会创建一个Graphics
对象,
我的问题是这样做更好还是最好在开始时只创建一次图形对象?
答案 0 :(得分:0)
我不确定性能差异,但我建议在OnResize中分配和处理你的后台缓冲区Bitmap和Graphics对象。我发现对于大多数自定义控件,您可以将更新后备缓冲区的实际工作尽可能地分离到数据更改发生的位置,并简化OnPaint以仅将后缓冲区位图blit到系统的Graphics。这适用于我写的自定义图形控件,因为数据没有响应用户交互而改变。它包含在手势滚动控件中,并大大改进了滚动动画。但您可以通过调用Update()来响应用户交互更改来扩展模式以处理更多交互式控件,以强制处理程序范围内的OnPaint。