为什么要Graphics
需要处置? 也是Pen
和SolidBrush
?为什么需要处理图形?
回答
那么简单的答案是他们实施'IDisposable',所以他们需要处置。
稍长的答案是它们消耗需要释放的非托管资源。通过直接调用dispose(或使用'using'语句),您可以释放这些资源,而不是等GC为您完成。
这些对象是非托管资源(特别是GDI +对象)的包装。如果这些对象没有明确处理,那么GC需要调用它们的终结器。这将延迟为其他GC回收资源。*这意味着您的应用程序将使用更多的资源。
更新:澄清的措词加上... *当GC遇到带终结器的对象时 - 假定GC.SuppressFinalize()尚未在Dispose()方法中调用 - 它将终结器排队以运行在未来某个时间在终结者线程上。对象所使用的内存和资源因此保持到至少在当前运行的GC之后。
如果我没有使用dipose方法怎么办?有没有某种内存泄漏? – Rye 2010-11-16 04:00:49
凯文你的答案似乎表示,如果你明确地处理对象,应用程序将使用比必要的更多的资源。那是你真正想说的吗? – 2010-11-16 04:00:59
@Rye。不,没有内存泄漏。 GC将最终发布非托管资源。直到fReachable处理完成才会发生。这比对象的范围长。 – 2010-11-16 04:02:25
- 1. 为什么sensorManager.registerListener需要处理程序?
- 2. c#什么需要处理时间?
- 3. 为什么我需要保留管理对象才能处理?
- 4. sigaction - 为什么我们不需要重置处理程序?
- 5. 为什么WCF需要DTC处理事务流?
- 6. 为什么我们需要Http处理程序?
- 7. 为什么你需要特别了解每个处理器?
- 8. 为什么多处理器系统需要禁用中断
- 9. 为什么RuntimeException不需要显式异常处理?
- 10. 为什么我们需要瞬态故障处理存储?
- 11. 为什么islower()和朋友需要处理EOF?
- 12. 为什么物理Web需要位置?
- 13. 为什么需要
- 14. 为什么'视图'需要被复制?
- 15. 为什么意图需要上下文?
- 16. 为什么iOS需要启动图像?
- 17. 为什么需要typedef GLXContext?
- 18. 为什么Apache需要SSLCertificateKeyFile?
- 19. 为什么android需要jvm
- 20. 为什么BizTalk需要MSDTC?
- 21. 为什么需要StaticResource?
- 22. 为什么wcf duplex需要?
- 23. 为什么需要EndExecuteNonQuery()?
- 24. Bootstrap为什么需要jQuery?
- 25. 为什么PhotoCamera需要VideoBrush?
- 26. 为什么Grails需要Xerces?
- 27. 为什么需要std :: minmax_element?
- 28. 为什么需要session_ destroy()?
- 29. 为什么HttpClient需要httpasyncclient?
- 30. 为什么需要copy_to/from_user?
似乎我的问题是错误的。它应该是托管和非托管资源。这就是为什么我不能在谷歌找到它。 :) – Rye 2010-11-16 04:12:55
是啊谷歌是真棒,除非你不能找出正确的关键字来触发一些体面的结果。 – 2010-11-16 04:15:42
感谢您的解释。 – Rye 2010-11-16 04:18:22