在绘画事件中使用新画笔是否更好,即

protected override void OnPaint(PaintEventArgs e) {
    e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
    using (SolidBrush b = new SolidBrush(Color.FromArgb(129, 242, 121))) {
        for (int i = 0; i < 12; i++) {
            e.Graphics.FillPath(b, path[i]);
        }
    }
    base.OnPaint(e);
}

或者在顶部定义一次,并在dispose方法中进行dispose,即
SolidBrush _brush;
protected SolidBrush Brush {
    get {
        if (_brush == null)
            _brush = new SolidBrush(Color.FromArgb(129, 242, 121));
        return _brush;
    }
}

最佳答案

创建和销毁画笔和画笔之类的绘图对象非常便宜,大约需要一微秒。实际绘制的代码成本的一小部分,通常以毫秒为单位。因此,您应该避免存储它们,这只会占用操作系统gdi对象堆中的宝贵空间,而gdi对象堆是需要由所有正在运行的进程共享的资源。唯一昂贵的绘图对象是字体。然而,winforms通过在内部缓存字体来解决这个问题。
使其一致,始终将using语句应用于您创建的图形对象。

07-28 02:44