尽管 Task Manager 能告诉您何时 发生了泄漏,但它不能帮您发现哪里 发生着泄漏。要做到这点,最好的办法是使用 Sleak,一个 SWT 开发工具(请参阅 参考资料)。您可以启用 SWT 所拥有的调试标记,使它跟踪 GDI 资源的创建位置。 Sleak 让您看到 GDI 资源以及它们是从哪里分配的。
SWT 和 JFace 提供了几个不同的类,帮助您在几个缓存中管理 GDI 资源。缓存往往比您想的更灵巧。如何以及何时使用缓存并不总是显而易见的。设计时应该注意的几个问题是:
处理完泄漏后,您应该考虑下面两个问题:
应用程序需要的总共的 GDI 资源数目。
创建这些资源导致的开销。
总共的 GDI 资源数目
您需要清醒地了解应用程序所需要的总共的 GDI 资源数目,以及有多少资源是副本。副本相当重要,因为您只要有可能就应该共享 GDI 资源以便降低应用程序使用的资源数目。很容易创建副本,而且您可以都没有意识到(我曾修改了 Sleak 工具使之发现副本,并将此改变以及其他有用的改变添加到 Eclipse 中。)
创建 GDI 资源所需的开销
一般而言,创建字体和图像耗费的资源比创建颜色多。根据应用程序的不同,图像的创建可能成为某些用户动作的重大开销。如果遇到这种情况,您可以考虑使用一些 SWT/JFace 所提供的缓存。