# 桌面視窗管理員 GPU 使用率高：原因與解決方法

桌面視窗管理員（`dwm.exe`）會占用 GPU、CPU 和記憶體，是因為螢幕上看到的每一個視窗都要由它合成成一張完整的桌面畫面，所以它的負載跟著螢幕上的內容起落，重新整理頻率、顯示器數量、HDR、視覺效果，最主要的還是那些不停重繪的應用程式。DWM 的 GPU 占用高，大多是別的應用程式或某項顯示設定的症狀，不是 DWM 自己出了故障，要做的是找出到底是誰在餵它。

DWM 關不掉，在工作管理員裡結束它也沒用，真正有用的是對著自己的配置把它測一遍，一次只改一處，同時讓顯示卡驅動程式保持最新。

## 桌面視窗管理員在做什麼

微軟的[桌面視窗管理員概觀](https://learn.microsoft.com/en-us/windows/win32/dwm/dwm-overview)講了它的運作方式，視窗不再直接畫到螢幕上，每個應用程式先畫進顯示記憶體裡的一塊離屏表面，再由 DWM 把這些表面合成成最終送到顯示器的桌面畫面，微軟列出的視覺效果、視窗框線、視窗切換動畫和高解析度支援，都是靠這套合成機制實現的。

所以 DWM 是常駐的，[DwmEnableComposition 的參考文件](https://learn.microsoft.com/en-us/windows/win32/api/dwmapi/nf-dwmapi-dwmenablecomposition)寫明這個函式從 Windows 8 起已經淘汰，DWM 也不能再透過程式關閉，呼叫它要求關掉合成不會有任何效果，在 Windows 10 和 Windows 11 上沒有一種受支援的桌面可以不用它。

在工作管理員裡結束 `dwm.exe`，造成負載的應用程式和設定都還在，數字很快又會回來，看起來像是 DWM 自己胃口大的占用，其實是它在替其他程式合成畫面付出的代價。

## 為什麼 GPU、CPU 和記憶體會上去

要合成的像素越多、影格越多、表面越多，合成的開銷就越大，常見原因有這些：

- **高重新整理頻率。** 144 Hz 下 DWM 每秒最多要合成 144 個影格而不是 60 個，這段時間裡螢幕上有任何變化，都得按這個頻率重新合成。
- **多台顯示器，或縮放比例不一致。** 每台顯示器都是獨立的輸出，筆電螢幕用 150% 縮放、旁邊的外接顯示器用 100%，視窗在兩塊螢幕之間移動時就要重新縮放，一台高解析度外接顯示器也會給每一個影格多加一大批像素。
- **HDR。** 微軟的 [HDR 設定頁面](https://support.microsoft.com/en-us/windows/hardware/display-graphics/hdr-settings-in-windows)提到用電池播放 HDR 內容會縮短續航，所以筆電拔掉電源時會自動關閉 HDR，桌機上它一直開著，也是一個值得測一測的變數。
- **透明和動畫效果。** 「開始」功能表、工作列和部分視窗背後的壓克力模糊，在背後內容變化時都要重新計算。
- **不停重繪的應用程式。** 瀏覽器在播影片，遊戲在無邊框或視窗模式下執行，錄影或直播軟體，遊戲或聊天軟體的疊加層，動態桌布，還有每一個影格都更新的硬體監控工具，都會源源不絕地給 DWM 送新內容，這是最常見的原因，也是為什麼你明明「什麼都沒做」，背景分頁裡有個暫停的影片或某個疊加層還開著，DWM 看起來卻一直在忙。
- **顯示卡驅動程式。** DWM 的工作都要經過 GPU 驅動程式，驅動程式的 bug 就會記在 DWM 頭上，Intel 在一篇支援文章裡記錄過一個案例，[第 6 代到第 10 代 Intel 處理器上的 dwm.exe 記憶體增長](https://www.intel.com/content/www/us/en/support/articles/000058381/graphics.html)，出現在 Windows 10 驅動程式 27.20.100.8587 及更新版本上，從 30 MB 左右開始一路累積，直到系統可能當機，Intel 給的解決辦法是安裝 Windows DCH 驅動程式 30.0.101.1191 或更新版本，如果 Windows Update 裝過別的版本，要先做一次驅動程式的乾淨安裝，如果你的 Intel 驅動程式比較舊，DWM 記憶體又只漲不降，先查這一條。

DWM 的記憶體裡包含它要合成的那些表面，視窗越多、顯示器越大、縮放越高，表面就越多，所以多顯示器的配置會明顯比單塊筆電螢幕用得多，這是正常的，開著同樣幾個視窗、幾個小時裡記憶體一直穩定上漲，就不正常了。

## 先在工作管理員裡測一測

按 `Ctrl + Shift + Esc`，在「處理程序」索引標籤裡找到「桌面視窗管理員」，如果沒有 GPU 欄，在任一欄標題上按右鍵，勾選「GPU」和「GPU 引擎」。

這兩欄要放在一起看，微軟的[工作管理員 GPU 文章](https://devblogs.microsoft.com/directx/gpus-in-the-task-manager/)解釋過，一個處理程序的 GPU 數字是它在所有 GPU 上最忙的那個引擎的使用率，「GPU 引擎」欄告訴你是哪塊 GPU 的哪個引擎，例如 `GPU 0 - 3D`，兩個處理程序可能都顯示很高的數字，用的卻是不同的引擎，影片應用程式跑在 Video Decode 引擎上、DWM 跑在 3D 引擎上，兩者並沒有在搶同一樣東西。

在「效能」索引標籤裡，點左側的每一塊 GPU，能看到它各個引擎的曲線，以及專用和共用記憶體隨時間的變化，在「詳細資料」索引標籤裡，在欄標題上按右鍵，選「選取欄位」，給 `dwm.exe` 加上 GPU 使用率或專用、共用 GPU 記憶體，同一篇文章也提醒，共用記憶體可能會被算到不止一個處理程序名下，所以各處理程序加起來可能比 GPU 實際用的還多，GPU 欄需要 WDDM 2.0 或更新的驅動程式才會出現。

動手改之前先記下三件事，DWM 用的是哪個引擎，數字是不是跟著你正在做的事情變化，記憶體是平穩的還是在往上爬。

## 一次只改一處，找出原因

改一處，看一分鐘 DWM，沒變化就改回去。

1. **一個一個關應用程式。** 先從會動的東西開始，瀏覽器裡的影片、遊戲、錄影或直播軟體、遊戲啟動器的疊加層、聊天和顯示卡工具、動態桌布，只最小化不一定夠，有些應用程式在背景還會繼續輸出畫面，關掉某個應用程式後 DWM 降下來了，原因就是它，接下來該看它自己的設定，硬體加速、影格率限制、疊加層開關這些。
2. **拔掉一台顯示器。** 拔掉一台後 DWM 平穩了，負載就來自多出來的解析度、重新整理頻率或不一致的縮放，測完再接回去，這是測試，不是解決辦法。
3. **降低重新整理頻率。** 微軟的[重新整理頻率指南](https://support.microsoft.com/en-us/windows/change-your-display-refresh-rate-in-windows-c8ea729e-0678-015c-c415-f806f04aae5a)走的是 設定 › 系統 › 顯示器 › 進階顯示 › 選擇重新整理頻率，帶星號的頻率會同時改變解析度，支援的顯示器在同一頁面還有「動態重新整理頻率」，只在需要時才把頻率調高，微軟提到較低的頻率更省電，測完切回去對比。
4. **關掉透明和動畫。** 微軟的[視覺效果步驟](https://support.microsoft.com/en-us/accessibility/windows/make-it-easier-to-focus-on-tasks)是進入 設定 › 協助工具 › 視覺效果，在這裡可以關掉「透明效果」和「動畫效果」，介面會變成實色，視窗也不再有動畫，兩個開關都可以按同樣的路徑打開。
5. **暫時關掉 HDR 測一測。** 在 設定 › 系統 › 顯示器 裡，有多台顯示器的話先在頂部選中 HDR 那台，關掉 HDR 再對比。

## 值得檢查的圖形設定

Windows 有兩個圖形選項會改變畫面送到 DWM 的方式，都在 設定 › 系統 › 顯示器 › 圖形 裡。

**視窗遊戲最佳化。** 微軟的[視窗遊戲頁面](https://support.microsoft.com/en-us/windows/optimizations-for-windowed-games-in-windows-11-3f006843-2c7e-4ed0-9a5e-f9389e535952)說，「預設設定」下的這個開關會把視窗和無邊框視窗模式下相容的 DirectX 10、DirectX 11 遊戲，從舊的 blt 呈現模型切到 flip 模型，降低影格延遲，如果這類遊戲執行時 DWM 很忙，可以打開它再重新啟動遊戲試試，遊戲有獨占全螢幕選項的話，切過去也是一種對比。

**硬體加速 GPU 排程。** 微軟的 [DirectX 團隊解釋過](https://devblogs.microsoft.com/directx/hardware-accelerated-gpu-scheduling/)，這個選項把 GPU 的大部分排程工作從 Windows 挪到 GPU 自己身上，只有 GPU 和它的 WDDM 2.7 或更新驅動程式都支援時，圖形設定裡才會出現，它不會減少 DWM 要合成的內容，所以當成一次 A/B 測試就好，切換後按 Windows 提示重新開機，重複同樣的操作，保留在你的硬體上表現更好的那個狀態。

## 更新或回復顯示卡驅動程式

微軟的[驅動程式指南](https://support.microsoft.com/en-us/windows/update-drivers-through-device-manager-in-windows-ec62f46c-ff14-c91d-eead-d7126dc1f7b6)建議先用 Windows Update，要自己下載驅動程式的話，只從製造商的官方網站下，對顯示卡來說，就是電腦廠商的支援頁面（筆電常用客製化驅動程式），或者直接去 Intel、AMD、NVIDIA 的官網，在裝置管理員裡展開「顯示卡」，能看到你有哪幾塊 GPU。

如果 DWM 的問題是更新驅動程式後才開始的，就回復，在裝置管理員裡對顯示卡按右鍵，選「內容」，打開「驅動程式」索引標籤，點「回復驅動程式」，提示重新開機就重新開機。

螢幕卡頓、黑屏或凍住，但 Windows 本身還有反應時，按 `Win + Ctrl + Shift + B`，微軟的[鍵盤快速鍵列表](https://support.microsoft.com/en-us/windows/keyboard-shortcuts-in-windows-dcc61a57-8ff0-cffe-9796-cb9706c75eec)說它用於在螢幕空白或黑屏時喚醒裝置，它對付的是卡住的顯示，不能修好一個一直在洩漏的驅動程式。

## 不要這樣做

- **不要結束 `dwm.exe`。** 它是 Windows 裡負責畫桌面的那部分，負載的根源在別處。
- **不要試圖停用 DWM**，不管是透過服務、登錄檔、「精簡」指令碼，還是號稱能關掉合成的工具，從 Windows 8 起它就關不掉了，這類調整好的時候什麼用都沒有，壞的時候會讓桌面停在一個很難復原的狀態。
- **不要重新命名或替換系統檔案**，例如 `dwm.exe` 或 `dwmcore.dll`。
- **不要照搬論壇上調 GPU 優先順序或排程的登錄檔改法。** 用設定裡的開關，隨時能改回去。
- **不要執行來路不明的驅動程式清理工具。** 廠商要求乾淨安裝時，例如 Intel 那篇文章，就按廠商自己的說明做。

## Mole 能幫上什麼

Mole for Windows 不改顯示、HDR、圖形或驅動程式設定，也不碰 DWM，它的「狀態」頁顯示 CPU、記憶體、磁碟和網路活動，還有一張 GPU 卡片，顯示最忙那個引擎的占用曲線，驅動程式回報顯示記憶體時顯示顯示記憶體，驅動程式提供溫度時顯示 GPU 溫度，處理程序列表按所屬應用程式分組，顯示每個應用程式的 CPU 和記憶體，沒有按處理程序的 GPU 欄，想看是哪個處理程序在拉高 GPU，用工作管理員的「GPU」和「GPU 引擎」欄，其餘內容見[說明裡的狀態部分](/tw/windows/help)。

有個好用的辦法，一邊一個個關應用程式，一邊看 Mole 的 GPU 卡片，在哪一步降下來，就知道是哪個應用程式在餵 DWM，如果漲的是 CPU，看 [Windows CPU 使用率過高](/tw/windows/blog/windows-high-cpu-usage)，記憶體的話看 [Windows 記憶體使用率過高](/tw/windows/blog/windows-high-memory-usage)，筆電還發燙的話，看 [Windows 筆電過熱](/tw/windows/blog/windows-laptop-overheating)。

## 常見問題

### dwm.exe 是病毒嗎？

真正的桌面視窗管理員是 Windows 的一部分，負責合成你看到的每一個視窗，它的占用高反映的是其他應用程式在畫什麼，不是惡意軟體。

### 能停用桌面視窗管理員嗎？

不能，從 Windows 8 起 DWM 合成就關不掉了，結束這個處理程序只會讓 Windows 再把它啟動起來，要降低它的負載，就去找讓它一直忙著的那個應用程式或顯示設定。

### 什麼都沒開，桌面視窗管理員的 GPU 占用為什麼還這麼高？

通常還有東西在畫，一個暫停的影片分頁、一個疊加層、一張動態桌布，或者一個監控小工具，高重新整理頻率和多台顯示器也會抬高基線，把這些一個個關掉，同時盯著 GPU 欄。

### dwm.exe 的記憶體為什麼一直漲？

視窗和顯示器變多時漲一些是正常的，開著同樣的視窗、記憶體卻連漲幾個小時，指向的是驅動程式問題，Intel 記錄過一個這樣的 dwm.exe 洩漏，在驅動程式 30.0.101.1191 裡修好了。


Canonical: https://mole.fit/tw/windows/blog/desktop-window-manager-high-gpu
