主题 : 提高Desktop heap
点击签名看看呗!
级别: 荣誉会员

UID: 53008
精华: 6
发帖: 2512
威望: 9736 点
无痕币: 35558 WHB
贡献值: 0 点
在线时间: 5213(时)
注册时间: 2008-08-17
最后登录: 2017-06-08

0 提高Desktop heap

Windows除了使用进程来管理资源外,还是用Sessiondesktop来管理资源。
比如只有在同一个Session里面的进程才可以共享剪贴板数据,
Windows Message只能在属于同一个desktop的进程之间传递。
   而desktop heap,是操作系统管理的,为不同session创建的,
由同一session内所有desktop共享的内存。当创建进程,创建GUI的时候,
都会消耗desktop heap。当Desktop Heap用光后,系统中各种莫名其妙的问题就会发生。
比如无法创建新进程,无法弹出菜单,API调用会莫名其妙地出错。
 
引用

support.microsoft.com 上搜索desktop heap,可以找到更多的信息。


Desktop heap用光的原因往往是太多进程同时运行,或者创建了太多GUI object
怀疑是Desktop heap相关问题的时候,首先可以用下面这篇文章的方法来检查是否Desktop heap用光:

  1. 首先,先到 Desktop Heap Monitor Version 8.1 下载安装程式。
  2. 安装的时候预设会自动解压缩相关档案到 c:\kktools 目录下,但并不会自动执行。
  3. 接下来就直接执行以下的批次档,就可以自动完成所有应该的动作了。以下是批次档的内容:

复制代码
  1. @echo off
  2. cd /d c:\kktools\dheapmon8.1\x86
  3. dheapinst.exe -y srv*http://msdl.microsoft.com/download/symbols
  4. dheapmon.exe -l
  5. dheapmon.exe > %TEMP%\dheap.txt
  6. start %TEMP%\dheap.txt
  7. dheapmon.exe -u
  8. dheapinst.exe -r


当你想看目前 Desktop Heap Size 时,直接点选批次档就可以完成所有步骤了,且批次档会自动将 driver 卸载,不会对你的电脑造成负担。 


3072 修改8192,10240,15360,20480 等数值...



MaxRequestThreads 这个参数约定了可以管理的最大线程数量,这个数量默认近为16  也有人修改此参数到80(有没有效就不得而知) 

microsoft号称修改SharedSection的第二个值,即3072,把该值改成“4096”或是“8192”后就可以解决运行大量程序时报内存不足的问题。
MS把这个值叫做“desktop heap”。 



如果确认是desktop heap问题后,可以参考改变注册表来做调整。

通过regedit.exe命令进入注册表,根据一下路径查找注册表参数:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows
其中,Windows是一个字符串参数,默认值如下(每一部分以空格间隔):
%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16
[ 此帖被呆水瓶在2009-10-11 22:03重新编辑 ]
本帖最近评分记录:
  • 无痕币:+30(勇者无敌) 感谢分享
  • Total 0.032258(s) query 3, Time now is:04-29 18:26, Gzip enabled 粤ICP备07514325号-1
    Powered by PHPWind v7.3.2 Certificate Code © 2003-13 秋无痕论坛