- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近遇到了this VerticalLabel control on CodeProject。
我注意到OnPaint方法会创建但不会处理Pen和SolidBrush对象。
这有关系吗,如果是这样,我如何证明它可能引起的任何问题?
编辑
通常,这不是关于IDisposable模式的问题。我知道,调用者通常应该在实现IDisposable的任何类上调用Dispose。
我想知道的是,如上例中未放置GDI +对象时,会遇到什么问题(如果有)。显然,在链接的示例中,在垃圾回收器启动之前,可能会多次调用OnPaint,因此有可能耗尽句柄。
但是,我怀疑GDI +在某些情况下会在内部重用句柄(例如,如果您使用Pens类中的特定颜色的笔,则会对其进行缓存和重用)。
我想了解的是,链接示例中的类似代码是否能够通过忽略调用Dispose而脱身。
如果没有,请看一个示例,演示它可能导致的问题。
我应该补充一点,我经常(including the OnPaint documentation on MSDN)看到无法处理GDI +对象的WinForms代码示例。
最佳答案
当然很重要。当不再需要实现IDisposable的类的所有实例时,请务必对其进行处置。当类使用非托管资源(即,.NET Framework未处理的操作系统资源)时,它们被定义为IDisposposable。
如果您不手动处理对象,那么在垃圾回收器调用对象终结器之前,这些非托管资源将不会被释放(只有在类已正确实现the Dispose pattern的情况下才会发生),这可能是因为垃圾收集器仅在检测到实际内存不足时运行。因此,当不处置对象时,您将保留其他应用程序可能会使用的操作系统资源。
关于此主题的讨论可以在这里找到:http://agilology.blogspot.com/2009/01/why-dispose-is-necessary-and-other.html
关于.net - 处置SolidBrush和Pen是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1819096/
以下代码片段仅返回灰度。在一天的大部分时间里,我一直为此感到困扰。有什么想法吗? using System.Drawing; private Graphics _g; public F
有没有办法在全局范围内创建一个 SolidBrush,或者我必须克隆一个现有的画笔? 全局变量: Gdiplus::Brush* WhiteBrush; 范围代码: { Gdiplus::So
我正在用颜色填充位图: // Assume we have something like: // Bitmap bitmap = new Bitmap(3, 2, PixelFormat.Format
在我的移动项目中,我想用半透明颜色填充一个矩形。通过文档,我了解到我可以使用 color.fromargb() 创建实心画笔。但问题是我只能在 color.fromargb(Red, Green, B
我正在使用 gdi+ 和 c++。我有一个关于 SolidBrush 的问题。如何克隆 SolidBrush? SolidBrush* oldBrush xxx; Brush* newBrush =
我尝试在调用方法中更改颜色文本 RickTextBox wpf。但是我遇到了一些麻烦。我的麻烦是 'SolidBrush' parameter type is not valid for format
我是一名优秀的程序员,十分优秀!