Windows XP 对每个进程有 10000 个用户句柄的限制,每个桌面 session 的总用户句柄数为 32000。但是,当我运行 4 或 5 个 SWT 进程时,每个进程消耗不超过 2000 个用户句柄,将始终抛出 SWT No More handles 异常。
有人知道为什么吗?
最佳答案
如果我没理解错的话,您可能遇到以下异常:
org.eclipse.swt.SWTError: No more handles
您可能正在创建未正确处置的资源(例如 Font
、Image
或 GC
对象)。您可能需要花点时间阅读 Managing Operating System Resources 上的 SWT 指南。 .
要确定是否确实如此,我可以推荐这篇有用的文章:Diagnosing Handle Leaks in SWT/RCP Windows Applications ,它解释了资源是什么并建议使用 Process Explorer或 DPus定位泄漏。
同事也极力推荐Sleak ,一个专注于 SWT 的应用程序,它实际上可以通知您剩余内存中剩余哪些资源。
要从技术上了解 SWT 正在制作什么句柄,this Sybase article describes有 3 种类型:用户对象、GDI 对象或内核对象句柄,每种句柄都有自己的最大值。
关于windows - SWT 不再有句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2018553/