如何增加Windows 10的GDI对象最大数量?

5

在网上搜索未能找到令人满意的答案,因此我必须再次提问:有没有办法增加Windows 10的GDI对象的最大数量?

我使用的应用程序是用VB6编写的,其中包含一些第三方控件(可能会泄漏控件),并且它使用大量子窗口来显示整个应用程序中的数据。

编辑: 该应用程序旨在创建非常大的用户控件的多个实例。每个控件都包含一个经过大量修改的第三方网格、工具栏和窗体。这些窗体本身可以打开不同的用户控件(带有网格、工具栏和窗体)等等。因此会创建大量的句柄。我们总是在寻找泄漏并立即修复它们,但不幸的是,并不是所有问题都是泄漏,而是应用程序设计的副作用(在我之前制作的)。

我尝试了几种方法,从增加注册表值到

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota]

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota]

到增加桌面堆,但没有任何效果。即使重新启动后,限制仍然是10000个句柄。

似乎有一个静态值隐藏在Windows或注册表中,它会覆盖该值,因为即使降低该值也不会影响10000个句柄的限制。

提前致谢!


1
这可能会有所帮助。你能否同时发布涉及的代码?如果它正在创建太多句柄,可能有一种方法来限制句柄数。 - Jimmy Smith
谢谢您的回复。我已经找到了那篇文章。我也阅读了那里发布的链接,但它并没有帮助我解决问题。更改注册表适用于Windows 8.1以前的版本。仅Windows 10会出现问题,因为就像我上面说的那样,它似乎不接受像之前的其他Windows版本一样更改的值。发布受影响的代码是一个问题,因为整个应用程序都受到影响,但我将在问题中添加更详细的描述。 - Stefan Hinkel
1
我做了一些阅读,发现了桌面堆的参考。测试此解决方案,这将引导您到此kb页面 - Jimmy Smith
我尝试增加桌面堆大小(在我的原始问题中提到),但对我没有起作用。10000个GDI对象限制仍然存在。 - Stefan Hinkel
我已经查看了一切,但什么也没找到。这似乎被限制了。究竟是哪个第三方控件泄露得如此严重?或许有一些解决方法。 - Jimmy Smith
显示剩余3条评论
2个回答

5

您可以更改Windows 10当前版本(已在1803、1809、1903、1909和2004上测试)的限制。

对于GDI句柄,请更改此注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota

范围:256 - 65,536。默认值:10000。

对于用户句柄,请更改此注册表键:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota

范围:200-18,000。默认值:10,000。


记得重新启动计算机以使更改生效。


2

为使此注册表设置生效,您需要重新启动Windows 10。此外,请注意在x64上有两个GDIProcessHandleQuota值存在于注册表中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接