我应该为每个Paint请求创建新的Pens/Brushes还是在整个应用程序生命周期中保留它们?

The*_*Sky 16 .net c# gdi+ winforms

我有一个应用程序做了很多绘图,让我们假装它是一个类似Viso的应用程序.它有一些对象,它们有多个绘制的子对象,可以连接的东西,调整大小等等.目前,当我在特定的子对象或对象上调用paint时,我会执行以下操作:

using(var pen = new Pen(this.ForeColor))
{
    // Paint for this object.
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了相互矛盾的答案,这应该针对一个不断绘制相同内容的应用程序(可能只是重新调整大小,移动等)来完成.我应该Pen/Brush将对象存储在对象中,然后在处理应用程序时将它们全部丢弃,或者它们是否足够高效以便为每次绘制调用创建/处理(记住这是一个非常图形密集的应用程序).

编辑:已经有两个答案有相互矛盾的答案,这是我不确定要切换的地方.有没有人对这些差异有任何统计数据?

And*_*ndy 9

您当然可以使用Pens和Brushes类来为您提供已由运行时创建的对象.

例如,如果您想要一个标准颜色,您可以这样做:

var pen = Pens.Red;
Run Code Online (Sandbox Code Playgroud)

同样,如果你只想要标准的实心画笔颜色,你可以用画笔做同样的事情:

var brush = Brushes.Red
Run Code Online (Sandbox Code Playgroud)

使用这些,您无需担心清理,处理或其他方式.

如果您想要自己创建不同的颜色,例如使用不同的alpha组件或渐变画笔,那么您仍然需要自己创建并适当地清理它们.

编辑:

创建和处理一个由100,000个新笔组成的数组,在我古老的旧机器上花了大约半秒钟,在调试模式下运行测试应用程序.

这相当于每笔约5微秒.只有你可以决定它是否足够快.我猜想这个时间对于你的其他行动来说可能是微不足道的.