gpt4 book ai didi

c# - Pen.Dispose 是否处理底层画笔?

转载 作者:太空狗 更新时间:2023-10-30 00:18:54 26 4
gpt4 key购买 nike

我创建了一个新的 Pen 对象:

Private NewPen As New Pen(New SolidBrush(Color.FromArgb(12,52,220)))

当我现在调用 NewPen.Dispose 时,它是否也会处理我用来创建笔的 SolidBrush,还是我必须单独处理它?<​​/p>

最佳答案

没有。代码段中的 Private 关键字是唯一真正提示您犯了错误的提示。这意味着您将笔作为一个类的字段。这绝不是正确的做法,绘制对象非常创建起来很便宜(大约一微秒)但保留起来很昂贵。它们被分配到一个桌面堆上,在该桌面上运行的所有程序都需要共享。您永远不想不必要地占用该堆中的空间。

始终在需要时创建绘图对象。这让你陷入了 Using 语句的成功陷阱:

Protected Overrides Sub OnPaint(e As PaintEventArgs)
Using sbr = New SolidBrush(Color.FromArgb(12, 52, 220))
Using pen = New Pen(sbr)
'' Use the pen
''....
End Using
End Using
End Sub

这对许多程序员来说往往是非常不直观的,他们通常知道保留对象并重新使用它们是一件好事。您要记住的一般规则是,一次性元素通常是相反的。有些类型的对象创建起来很昂贵,因此似乎有必要保留它们。然而,.NET Framework 始终努力自行缓存它们。 Font 类就是一个很好的例子。

关于c# - Pen.Dispose 是否处理底层画笔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27201027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com