gpt4 book ai didi

.net - 处置SolidBrush和Pen是否重要?

转载 作者:行者123 更新时间:2023-12-03 14:15:39 26 4
gpt4 key购买 nike

我最近遇到了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/

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