【发布时间】:2011-05-10 14:47:24
【问题描述】:
为什么需要处理Graphics?
还有Pen 和SolidBrush?
【问题讨论】:
为什么需要处理Graphics?
还有Pen 和SolidBrush?
【问题讨论】:
嗯,简单的答案是他们实现了“IDisposable”,所以他们需要被处置。
略长一点的答案是它们消耗需要释放的非托管资源。通过直接调用 dispose(或使用 'using' 语句),您可以释放这些资源,而不是等待 GC 为您这样做。
【讨论】:
这些对象是非托管资源的包装器,特别是 GDI+ 对象。如果这些对象没有显式释放,那么 GC 需要调用它们的终结器。这将延迟为另一个 GC 回收它们的资源。*这意味着您的应用程序将使用比必要更多的资源。
更新:以上澄清措辞加上... * 当 GC 遇到带有终结器的对象时 - 假设在 Dispose() 方法中没有调用 GC.SuppressFinalize() - 它会将终结器排入队列以在未来某个时间在终结器线程上运行。因此,对象使用的内存和资源至少会保留到当前运行的 GC 之后。
【讨论】: