具有一个GDI泄漏的应用程序,它将最终导致10,000个分配的GDI对象崩溃。我尝试将GDIProcessHandleQuota增加到20,000,但是当程序达到10,000个对象时,该程序仍然崩溃。我们目前正在修补此泄漏,但出于好奇-是否有办法提高单个过程的GDI限制?还是10k是单个应用程序的硬限制?
有一种可行的解决方案。我在这里处理行为不当的供应商应用程序,该应用程序分配了大量的GDI对象,并且该解决方案使它在大多数时间都可以工作...]
执行
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems" /v windows
寻找SharedSection=
,应为3个数字,以逗号分隔。一次将中间数字增加1024,看看是否能解决您的问题。您正在使用此变量控制“桌面堆”的数量,该变量过去使我无法正常运行GDI。
查看KB184802了解更多信息。搜索SharedSection以找到页面的相关部分。
10K是硬性限制。
通过更改GDIProcessHandleQuota,我能够将GDI对象从10000增加到15000,但这需要重新启动才能生效。我不必更改SharedSection值,只需要重新启动即可。