我试图在我的 SWT 应用程序中查找仅 Windows 问题的原因,该问题有时会遇到以下错误:
org.eclipse.swt.SWTError: No more handles
跟踪引发此错误的行表明它正在调用 CreateWindowEx Windows API 函数,如果没有可用的 GDI 句柄,该函数可能会失败。
当通过远程桌面对我们的 Windows Server 2008 构建服务器之一上的应用程序运行测试时,该错误会定期发生。
到目前为止,我已经发现并修复了许多 SWT Image 和 Font 对象的泄漏,其中一些导致每次调用应用程序都会泄漏数百个 GDI 句柄。
但是,我正在努力验证(使用故意使用大量句柄的测试应用程序)我已经解决了这个问题。我的测试应用程序达到了每进程 10,000 个 GDI 句柄的限制。连续运行它不会导致问题;同时运行两个或三个。
所以,我的问题终于来了:
在任何情况下,Windows 上的 GDI 句柄是否有可能比创建它的进程寿命更长?
如果是这样,是否有一个工具可以用来查看这些“泄露”的 GDI 句柄的数量?