SWT没有更多的句柄

时间:2010-01-07 06:10:38

标签: windows swt handles

Windows XP的每个进程限制10000个用户句柄,每个桌面会话总共32000个。但是,当我运行4或5个SWT进程时,每个进程消耗不超过2000个用户句柄,SWT No More处理异常将始终丢弃。

有谁知道为什么?

8 个答案:

答案 0 :(得分:42)

如果我理解正确,您可能会遇到以下异常:

org.eclipse.swt.SWTError: No more handles

您可能正在创建未正确处理的资源(例如FontImageGC个对象)。您可能需要花一点时间阅读Managing Operating System Resources上的SWT指南。

为了确定是否确实如此,我可以推荐这篇有用的文章:Diagnosing Handle Leaks in SWT/RCP Windows Applications,它解释了哪些资源是什么,并建议使用Process ExplorerDPus来定位泄漏。

同事也强烈推荐Sleak,这是一个专注于SWT的应用程序,它实际上可以告知您剩余内存中剩余的资源。

为了对SWT处理的内容有一个非常技术性的理解,this Sybase article describes有三种类型:用户对象,GDI对象或内核对象句柄,每个句柄都有自己的最大值。

答案 1 :(得分:7)

您的程序中最有可能出现某种资源泄漏。使用以下实用程序(http://www.eclipse.org/articles/swt-design-2/sleak.htm)作为查找swt资源泄漏的简便方法。我用它来清理我正在使用的rcp应用程序中的一大堆问题

答案 2 :(得分:2)

限制不是10000个句柄。应用程序可以使用远超过10000个句柄(如果RAM允许)。限制在于GDI和用户资源(图形元素)。

SWT应用程序使用哪种资源(您可以通过taskmgr查看)?这将有助于了解泄漏的是什么。

答案 3 :(得分:1)

为了记录,如果这是我的问题,我会接受@Paul的回答。但是,如果他们遇到这个问题,我想在这里添加一个偷偷摸摸的问题以帮助其他人......

检查字体的使用情况。

在我的情况下,我的句柄并不是那么高,但我是新的字体实例并将它们交给StyledText样式。我不得不声明我想要使用的字体,类级别。这为我修好了。

答案 4 :(得分:1)

我在eclipse 3.6 SR1中也看到了这个错误,结果是由于数百个编辑器标签被打开而引起的。关闭选项卡可修复错误。

答案 5 :(得分:0)

请尝试以下步骤:

  • 转到eclipse主目录(安装eclipse的地方),然后转到plugins文件夹
  • 从com.google。*
  • 开始删除所有最近安装的插件
  • 再次尝试重启你的日食,它可能会重新开始工作(为我工作。)
  • 尝试从谷歌或只需要一次安装旧插件。 (我打算试试这个。)

答案 6 :(得分:0)

在我的系统Windows7 x64上,我可以在TeamViewer 8运行时重现它(www.teamviewer.com)。当我停止TeamViewer时,错误消失了。

您可以查看:https://bugs.eclipse.org/bugs/show_bug.cgi?id=402983

希望有所帮助。

答案 7 :(得分:0)

我也遇到了这个问题,但现在我已经解决了。

就我而言,我通过Citrix XenApp运行带有SP1的Win7和Spring Tool Suite 3.7.2(Eclipse Mars 4.5.1)。当我在 Package Explorer Java Editor 之间切换时会发生此错误。

我的解决方案:在Win7中运行services.msc,找到" Tablet PC输入服务",停止它。

希望这可以帮助别人。