gpt4 book ai didi

user-interface - 克服 Windows 用户对象句柄限制

转载 作者:行者123 更新时间:2023-12-04 22:17:46 29 4
gpt4 key购买 nike

我正在寻找在构建重量级 Windows 界面时处理用户对象句柄限制的高级策略。请说明您如何使用 SWT 或直接 Windows GUI API 克服或绕过此问题。我唯一不感兴趣的是优化小部件使用的策略,因为我已经广泛地这样做了,它并没有解决问题,只会降低它的可能性。

我的情况:
我有一个基于 SWT 的 GUI,它允许在同一个父 shell 中进行多个 session ,并且在每个 session 中它们是显示用户生成的评论列表的 3 个独立位置。当用户打开多个 session 并提取填充这些列表的数据时,用户对象句柄的数量可能会根据评论的数量而急剧增加。

我目前的解决方案:
1. 默认情况下,我对评论进行分页,从而限制了每个 session 中的评论行数,但由于管理需求,我还有一个有效的“查看全部”按钮,它完全绕过了这一点。
2.我在每一行自定义绘制所有不可编辑的信息。这意味着每一行仅使用 2 个对象句柄。
3. 我创建了 JNI 调用来查询操作系统的当前使用情况和最大使用情况。有了这个,我可以向用户表明即将发生崩溃。不用说,他们忽略了这个警告。

最佳答案

首先,您确定问题不是桌面堆与句柄计数吗?每个句柄可以消耗一定数量的 Windows 桌面堆。一个 USER 句柄可能会占用很多空间,有些可能会占用很少的空间。我建议这样做是为了确保当它真的是别的东西时你不会追逐用户句柄计数。 (谷歌微软的 dheapmon 工具,它可能会有所帮助)

我读过您可以通过更改注册表中的键来更改句柄的最大值:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\
当前版本\Windows\ USERProcessHandleQuota GDIProcessHandleQuota

这可能是用户的短期修复。

我会通过首先弄清楚每个项目需要维护哪些 2 个用户句柄来解决这个问题(比如列表框中的每个项目需要 2 个?)。这似乎很可疑。 User handles仅适用于少数顶级 Windows UI 对象(Windows、菜单、光标、窗口位置、 图标 等...)。我不明白为什么您的小部件需要为每个项目保留 2 个对象(它是一个图标句柄吗??)。

如果你想把整个事情撕成碎片——这听起来像是 virtual-mode List-View 的工作。 (LVS_OWNERDATA)。

关于user-interface - 克服 Windows 用户对象句柄限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/164776/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com