每次创建一个新的画笔功能称为危险吗?它会使用大量的ram吗?
那么,我应该使用哪一个?
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(new Pen(Color.Black.....
或
tpen = new Pen(Color.Black)
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(tpen
答案 0 :(得分:3)
如果您不更改Pen
属性,则可以使用Pens.Black
,这是一个您甚至无法处置的标准Pen
。
如果您知道只使用少量Pens
,则可以在程序运行时保留它们。
如果您需要创建大量或未知数量的Pens
,可能需要处理绘图操作文件,请在using
条款中创建它们,并且不要创建它们。担心创造它们的时间;它发生得非常快。
而且他们的存在不是关于记忆,而是关于GDI
资源,这些资源有限,因此必须不泄漏..
答案 1 :(得分:2)
Pen
实现了IDisposable
,这意味着它应该在不再需要时立即处理掉。你不应该在DrwaLine
调用中直接创建它(因为没有办法处理它)。它也不应该是类成员,假设DrawLine
调用只需要 。
更好的方法是:
private void Form1_Paint(object sender, PaintEventArgs e)
{
using(Pen pen = new Pen(Color.Black))
{
e.Graphics.DrawLine(tpen, ...);
}
}
即使发生异常,笔也会被处理掉。
如果您设置的只是颜色,那么可以使用静态Pens.Black
属性对其进行内联:
e.Graphics.DrawLine(Pens.Black, ...);
由于该对象将由Pen
类缓存,您无需担心处置它。