0

我正在对应用程序可以使用的窗口句柄数量进行一些研究。我正在使用 Delphi XE2 并使用 AllocateHWnd 例程,该例程通过使用 CreateWindowsEx 创建一个不可见的窗口句柄来接收和处理 Windows 消息。

我发现了一些有趣的东西,我想从专家那里知道为什么会有这种行为。

在创建服务应用程序时,我在 Windows 7 机器上最多可以达到 2220 个句柄,如果我在服务配置中激活“允许服务与桌面交互”选项,我可以达到大约 9823 个句柄!

Windows 2008 运行方式相同,我可以在非交互式服务上创建 ~2220 个句柄,在交互式服务上创建超过 9000 个

我已经在 Windows 2012 服务器上进行了测试,即使打开了交互式服务标志,我也无法创建超过 2050 个句柄......为什么会有这样的限制以及如何增加它?

我知道使用这么多句柄的软件设计得很糟糕,但我们正在测试一个具有密集 TCP/IP 连接处理的软件,它需要许多句柄来处理入站和输出 TCP/IP 连接

如果我的应用程序是常规桌面应用程序,那么即使在 Windows 2012 上我也可以创建超过 9000 个句柄,那么,为什么对服务应用程序有这种限制?

4

1 回答 1

2

听起来您面临“桌面堆耗尽”综合症。可以在 Ntdebugging 的博客上找到一个很好的解释:

无论如何,正如@DavidHeffernan 所说,最好重新设计您的应用程序:)

于 2012-12-13T17:45:46.020 回答