The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

介紹好用工具:Desktop Heap Monitor

我之前其實也常遇到 "Windows桌面開太多東西就怪怪的" 的問題,仔細算了一下原來我的視窗已經開超過 30 個,30 個是有點扯,不過當時還在 IE 6 的時代,還沒有支援頁籤(Tab)功能,像我寫 Code 的時候都會開許多網頁查詢文件或測試,大腦的 Multithread 如火如荼的進行中,且在做 context switch (Alt+Tab) 時也很快,所以都不捨得關視窗,但就是常會遇到視窗怪怪的問題,一般的解法通常都是「重開機」或「登出然後重新登入」來解決這個問題。不過因為「有經驗」了,後來我自己也養成習慣不要一直開啟著一堆視窗不關閉,所以慢慢的也很少遇到這個問題了。

前幾天從 黑暗執行緒 部落格看到 【茶包射手專欄】Windows桌面開太多東西就"怪怪的" 文章,才得知原來是 Desktop Heap 不夠的關係所致。基本上 Windows XP 預設的 Desktop Heap 為 3072KB,如果你的記憶體夠大 ( 例如 2GB 以上 ),應該就可以調大些,我個人是不敢調太大,不知道會對電腦造成什麼影響,不過我看 Jeffrey 大大都敢開到 8192KB 了,小弟我也就跟進了。

我原理不講太多,有興趣的可以看本文章最下面的相關連結

接下來我直接講如何修改這個設定,不過如果你是用 Windows Vista 的話,其實是不需要改的,因為 Windows Vista 預設的 Desktop Heap 就開到 20MB 了:

  1. 先開啟 regedit.exe 準備修改機碼(Registry)
  2. 找到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems 機碼
  3. 找到 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
  4. 然後將 SharedSection=1024,3072,512 改成 SharedSection=1024,8192,512 即可設定完成。
  5. 最後,重開機就會生效了。

當然,本文章的主旨還是在介紹 Desktop Heap Monitor 工具,這個工具可以看出你的電腦 Desktop Heap 目前的使用率,如果使用率快超過 100% 時,電腦大概就開始要不穩了,以下是我剛用 Desktop Heap Monitor 產生出來的結果,而你要注意的就是 WinSta0\Default 這一項。

Desktop Heap Information Monitor Tool (Version 8.1.2925.0)
Copyright (c) Microsoft Corporation.  All rights reserved.
-------------------------------------------------------------
  Session ID:    0 Total Desktop: ( 11456 KB -    9 desktops)

  WinStation\Desktop            Heap Size(KB)    Used Rate(%)
-------------------------------------------------------------
  WinSta0\Default                    8192             21.4
  WinSta0\Disconnect                   64              4.5
  WinSta0\Winlogon                    128              9.9
  Service-0x0-3e7$\Default            512             25.3
  Service-0x0-3e4$\Default            512              5.6
  Service-0x0-3e5$\Default            512              6.2
  SAWinSta\SADesktop                  512              0.5
  __X78B95_89_IW\__A8D9S1_42_ID       512              0.5
  msswindowstation\mssrestricteddesk  512              2.5
-------------------------------------------------------------

眼尖的你應該可以發現我電腦的 Heap Size 已經調到 8192 了,而我目前的 Used Rate 是 21.4%,接下來我連續開啟 10 個「檔案總管」,你可以看到如下的 Used Rate 已經飆到 28.4% 了,因為我已經先將 Heap Size 調到 8192,所以成長的比率只有 7% 而已,如果你還用預設的 3072 的話,可能就會飆高的特別快 ( 19% )。

Desktop Heap Information Monitor Tool (Version 8.1.2925.0)
Copyright (c) Microsoft Corporation.  All rights reserved.
-------------------------------------------------------------
  Session ID:    0 Total Desktop: ( 11456 KB -    9 desktops)

  WinStation\Desktop            Heap Size(KB)    Used Rate(%)
-------------------------------------------------------------
  WinSta0\Default                    8192             28.4
  WinSta0\Disconnect                   64              4.5
  WinSta0\Winlogon                    128              9.9
  Service-0x0-3e7$\Default            512             27.5
  Service-0x0-3e4$\Default            512              5.6
  Service-0x0-3e5$\Default            512              6.2
  SAWinSta\SADesktop                  512              0.5
  __X78B95_89_IW\__A8D9S1_42_ID       512              0.5
  msswindowstation\mssrestricteddesk  512              2.5
-------------------------------------------------------------

從這個數據看來,我覺得調到 8192 應該已經綽綽有餘了。

因為安裝 Desktop Heap Monitor 有點囉唆,每次在使用的時候也需要特別載入 driver 才能使用,所以我自己寫了一個批次檔可以自動安裝、執行、檢視結果、解除安裝,以下是我整理的安裝執行步驟:

  1. 首先,先到 Desktop Heap Monitor Version 8.1 下載安裝程式。
  2. 安裝的時候預設會自動解壓縮相關檔案到 c:\kktools 目錄下,但並不會自動執行。
  3. 接下來就直接執行以下的批次檔,就可以自動完成所有應該的動作了。以下是批次檔的內容:
@echo off
cd /d c:\kktools\dheapmon8.1\x86
dheapinst.exe -y srv*http://msdl.microsoft.com/download/symbols
dheapmon.exe -l
dheapmon.exe > %TEMP%\dheap.txt
start %TEMP%\dheap.txt
dheapmon.exe -u
dheapinst.exe -r

當你想看目前 Desktop Heap Size 時,直接點選批次檔就可以完成所有步驟了,且批次檔會自動將 driver 卸載,不會對你的電腦造成負擔。

相關連結