首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pen.Dispose是否处理底层刷子?

Pen.Dispose是否处理底层刷子?
EN

Stack Overflow用户
提问于 2014-11-29 10:03:05
回答 2查看 321关注 0票数 5

我创建了一个新的钢笔对象:

代码语言:javascript
复制
Private NewPen As New Pen(New SolidBrush(Color.FromArgb(12,52,220)))

当我现在调用NewPen.Dispose时,它是否也释放了我用来创建笔的SolidBrush,还是必须单独处理它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-29 10:27:59

不是的。在您的代码片段中的Private关键字是您正在犯错误的唯一真正提示。这意味着你把笔变成了一个类的字段。这从来都不是正确的做法,绘制对象创建起来非常便宜(大约1微秒),但保持在周围却很昂贵。它们被分配到桌面堆上,所有在该桌面上运行的程序都需要共享。你永远不想在那个堆里占据不必要的空间。

始终在需要时创建绘图对象。这让您在使用the语句时陷入了成功的深渊:

代码语言:javascript
复制
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框架总是努力将它们缓存起来。Font类就是一个很好的例子。

票数 7
EN

Stack Overflow用户

发布于 2014-11-29 10:21:14

简单的回答:,no,钢笔类(单击查看.net源代码)不存储对画笔的任何引用。你负责处理刷子。这就是为什么返回False的原因

代码语言:javascript
复制
Using b As New SolidBrush(Color.Black)
    Using p As New Pen(b)
        Debug.WriteLine("Is equal: {0}", (b Is p.Brush))
    End Using
End Using
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27201027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档