【问题标题】:Why should graphics needs to be disposed?为什么需要处理图形?
【发布时间】:2011-05-10 14:47:24
【问题描述】:

为什么需要处理Graphics? 还有PenSolidBrush?

【问题讨论】:

    标签: c# winforms graphics gdi


    【解决方案1】:

    嗯,简单的答案是他们实现了“IDisposable”,所以他们需要被处置。

    略长一点的答案是它们消耗需要释放的非托管资源。通过直接调用 dispose(或使用 'using' 语句),您可以释放这些资源,而不是等待 GC 为您这样做。

    【讨论】:

    • 看来我的问题是错误的。它应该是托管和非托管资源。这就是为什么我不能在谷歌找到它。 :)
    • 是的,谷歌很棒,除非你想不出正确的关键字来触发一些不错的结果。
    【解决方案2】:

    这些对象是非托管资源的包装器,特别是 GDI+ 对象。如果这些对象没有显式释放,那么 GC 需要调用它们的终结器。这将延迟为另一个 GC 回收它们的资源。*这意味着您的应用程序将使用比必要更多的资源。

    更新:以上澄清措辞加上... * 当 GC 遇到带有终结器的对象时 - 假设在 Dispose() 方法中没有调用 GC.SuppressFinalize() - 它会将终结器排入队列以在未来某个时间在终结器线程上运行。因此,对象使用的内存和资源至少会保留到当前运行的 GC 之后。

    【讨论】:

    • 如果我不使用 dipose 方法会怎样?是否存在某种内存泄漏?
    • Kevin 您的回答似乎是说,如果您明确处置对象,应用程序将使用比必要更多的资源。这就是你真正想说的吗?
    • @Rye。不,没有内存泄漏。 GC 最终会释放非托管资源。在处理 fReachable 之前它不会发生。比对象的范围长。
    • @Conrad - 感谢您发现错误。这个名字是詹姆斯,不是凯文。 :)
    • @James 很奇怪我写凯文的方式。对此感到抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2014-12-29
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多