我正在研究应用程序可以使用的Windows句柄数量。我正在使用Delphi XE2并使用AllocateHWnd例程,它通过使用CreateWindowsEx来接收和处理Windows消息来创建一个不可见的窗口句柄。
我找到了一些有意义的东西,我想从专家那里知道为什么会这样做。
创建服务应用程序时,我在Windows 7计算机上最多可以访问2220个句柄,如果我在服务配置中激活“允许服务与桌面交互”选项,我可以访问大约9823个句柄!
Windows 2008以相同的方式运行,我可以在非交互式服务上创建~2220个句柄,在交互式服务上创建超过9000个句柄
我已经在Windows 2012服务器上进行了测试,即使打开了交互式服务标志,我也无法创建超过2050个句柄...为什么会出现这样的限制?如何增加它?
我知道使用那么多句柄的软件设计很差,但是我们正在测试这个软件,这个软件具有密集的TCP / IP连接处理,需要许多句柄来处理入站和输出TCP / IP连接
如果我的应用程序是常规桌面应用程序,那么我甚至可以在Windows 2012上创建超过9000个句柄,那么,为什么会对服务应用程序进行此类限制呢?
答案 0 :(得分:2)
听起来你正面临着“桌面堆耗竭”综合症。 关于它的一个很好的解释可以在Ntdebugging的博客上找到:
无论如何,正如@DavidHeffernan所说,重新设计你的应用程序更好:)