Windows 的設定裡沒有這個選項。電源計畫和電源模式都沒有「看 CPU 忙不忙再切換」的選項,工作排程器也沒有「CPU 使用率超過多少」這種觸發條件。你想在轉檔、輸出影片、跑大型運算時讓電腦自動換成高效能,做完再換回來,有兩個做法:自己寫一段一直執行的 PowerShell 腳本,或用 PowerDoze 的「CPU 忙碌時自動切換」。這篇附上可以直接貼上的腳本,也說明兩種做法各自做不到什麼。
Windows 的設定裡,真的沒有這個選項嗎?
沒有。電源計畫在「控制台 → 電源選項」裡選,Windows 的電源模式在「設定 → 系統 → 電源和電池」裡選(沒有電池的桌機,這一頁叫「電源」)。這兩個設定裡,都沒有「CPU 忙的時候換成別的」這種選項。
工作排程器可以在固定時間、開機、登入等時機執行切換電源計畫的指令,但它的觸發條件裡沒有「CPU 使用率超過多少」這一種。用指令建立排程時(schtasks /create),你能選的時機是:每隔幾分鐘、每小時、每天、每週、每月、只執行一次、開機時、登入時、閒置時、發生特定事件時。有「閒置時」,但沒有反過來的「很忙時」。
Windows 內建的效能監視器另外可以設定警示:CPU 使用率超過你設的門檻時,執行一個工作排程器的工作。不過忙起來和閒下來要各設一組,我們也沒有實際用它切換過電源計畫,所以這篇不教這個做法。
這篇用的做法,是讓一個程式一直開著,自己去看 CPU 使用率。你可以自己寫一個,也可以交給軟體。
CPU 使用率,一行 PowerShell 就讀得到
在工作列的搜尋框輸入 powershell,打開 Windows PowerShell,輸入下面這一行,按 Enter:
(Get-CimInstance Win32_Processor).LoadPercentage
它會回傳一個 0 到 100 的整數,就是你的 CPU 目前的使用率(百分比)。我們在測試電腦上執行過這一行。
一段 12 行的腳本:忙起來切高效能,閒下來切回平衡
把下面整段貼進 Windows PowerShell 視窗,按 Enter,它就開始執行。開頭三行是你可以改的數字:兩個門檻(百分比)、各要持續幾秒,還有多久讀一次。
$busyAt = 80; $busySec = 30 # CPU 使用率達 80% 以上、連續 30 秒,就切到高效能
$calmAt = 30; $calmSec = 60 # CPU 使用率降到 30% 以下、連續 60 秒,就切回平衡
$every = 5 # 每 5 秒讀一次
$busySince = $null; $calmSince = $null; $boosted = $false
while ($true) {
$cpu = (Get-CimInstance Win32_Processor | Measure-Object -Property LoadPercentage -Average).Average; $now = Get-Date
if ($null -ne $cpu -and $cpu -ge $busyAt) { if (-not $busySince) { $busySince = $now } } else { $busySince = $null }
if ($null -ne $cpu -and $cpu -le $calmAt) { if (-not $calmSince) { $calmSince = $now } } else { $calmSince = $null }
if (-not $boosted -and $busySince -and ($now - $busySince).TotalSeconds -ge $busySec) { powercfg /setactive SCHEME_MIN; $boosted = $true }
if ($boosted -and $calmSince -and ($now - $calmSince).TotalSeconds -ge $calmSec) { powercfg /setactive SCHEME_BALANCED; $boosted = $false }
Start-Sleep -Seconds $every
}
這段腳本做的事:
- 大約每 5 秒讀一次 CPU 使用率。讀法跟「CPU 使用率,一行 PowerShell 就讀得到」那一行一樣,只是多了一步取平均。
- 第一次讀到 80% 以上時,記下當時的時間;之後只要有一次低於 80%,就重新計時。從記下的時間算起滿 30 秒,就切到「高效能」計畫。
- 切過去之後,用同樣的方式看 30% 以下:連續滿 60 秒,就切回「平衡」計畫。
- CPU 使用率介於 30% 和 80% 之間,或這一次讀取失敗時,兩邊都重新計時,電源計畫維持不變。
門檻分成兩個數字,是為了避免來回切換。只用一個門檻(例如 60%)的話,轉檔時 CPU 使用率在 55% 到 65% 之間上下跳,你的電源計畫就會一下切過去、一下切回來。兩個門檻中間留一段空檔,就不會這樣。
腳本裡的 SCHEME_MIN 和 SCHEME_BALANCED,是 Windows 內建電源計畫的別名,可以代替那串很長的計畫編號。SCHEME_MIN 是「高效能」,SCHEME_BALANCED 是「平衡」,還有一個 SCHEME_MAX 是「省電」。名字有點反直覺:MIN 和 MAX 指的是「省電的程度」,省電最少的就是高效能。你可以執行 powercfg /aliases 自己確認,我們在測試電腦上執行過。
用這段腳本之前,你要先知道的六件事
- 視窗要一直開著。關掉 Windows PowerShell 視窗,腳本就停止。關掉的時候如果正在用高效能,它不會幫你切回來。重新開機之後,也要再貼一次。
- 它切回的是「平衡」,不是你原本用的計畫。你平常用自己建立的計畫的話,先執行
powercfg /list,從清單裡複製那個計畫的編號(GUID,一串英文字母和數字),換掉腳本裡的SCHEME_BALANCED。 - 它只看 CPU。顯示卡很忙、CPU 使用率卻不高的時候,它不會切換。
- 它一開始假設你正在用平衡。要先忙過一次、切到高效能之後,它才會切回平衡。
- 有些電腦沒有「高效能」計畫。Modern Standby 是近幾年很多新筆電使用的一種睡眠方式。微軟的文件說,支援 Modern Standby 的電腦只能使用「平衡」或從平衡複製出來的計畫。這種電腦執行
powercfg /list,清單裡可能看不到高效能,這段腳本也就切不過去。 - 公司或學校的電腦可能切不了。Windows 預設允許一般使用者切換電源計畫,但管理員可以用群組原則把它鎖住。
PowerDoze 的「CPU 忙碌時自動切換」怎麼運作?
這是 Pro 功能,在 Microsoft Store 版 PowerDoze(2.4.0 起)。打開 PowerDoze 的「智能偵測」頁,找到「CPU 忙碌時自動切換」的開關。出廠時這個開關是關的,你要自己打開。免費版會看到一張鎖定的卡片,寫著「升級 Pro 即可使用」。
打開之後,PowerDoze 在背景執行的程式大約每 3 秒讀一次整台電腦的 CPU 使用率。它讀的是上一次讀取到這一次之間的平均值,不是單一核心,也不包含顯示卡。判斷方式跟那段 12 行的腳本一樣用兩個門檻:要連續忙滿你設的時間才切換,中間有一次低於門檻就重新計時;CPU 使用率介於兩個門檻之間時,維持目前的狀態。
卡片上可以調的設定和預設值:
| 畫面上的設定 | 預設值與可以調的範圍 |
|---|---|
| 「CPU 使用率達 80% 以上算忙碌」 | 預設 80%,可以調 10%~100% |
| 「要忙多久才切換」 | 預設 30 秒 |
| 「忙碌時切換到」 | 預設是內建的「高效能」模式,也可以選你其他的 PowerDoze 電源模式 |
| 「CPU 使用率降到 30% 以下算閒下來」 | 預設 30%,可以調 5%~95%,而且要比忙碌的門檻低 |
| 「要閒多久才換回來」 | 預設 60 秒 |
兩個「要多久」都從下拉選單選:5、10、15、30 秒,或 1、2、5、10、30、60 分鐘。
切換成功時,會跳出標題「CPU 忙碌」的通知;用預設設定的話,內容是「電腦正在忙,已切換到「高效能」」。卡片上也會顯示「電腦正在忙」或「目前不算忙」,以及「目前 CPU 使用率」是多少。
PowerDoze 切換它自己的電源模式時,改的是 Windows 的電源計畫,不會修改 Windows 的電源模式。內建的「高效能」模式,用的就是 Windows 的高效能計畫。
閒下來之後,由排程決定用哪個模式,不是還原成切換前那個
卡片的說明寫「閒下來後,就回到原本的模式」。實際的做法是:電腦閒下來之後,PowerDoze 會取消 CPU 規則的切換要求,改由你設定的依時間排程或其他規則,決定現在該用哪個模式。它不會記住切換前是哪個模式,再原樣還原。
所以如果你忙碌的這段時間剛好跨過排程換時段的時間,閒下來後用的是新時段的模式。切回來的時候,不會跳出「CPU 忙碌」的通知。
跟手動切換、其他規則撞在一起時,誰說了算?
由高到低:
- 電量過低時的規則最優先。
- 再來是你手動選的模式,或用「暫時套用」選的模式。這段時間 CPU 再忙,也不會蓋過你的選擇。暫時套用結束後,如果電腦還在忙,CPU 規則會自己重新生效。
- 接著是 CPU 忙碌、前景程式、Wi-Fi、離開模式這幾種規則。它們在同一層,以最近提出要求的那一條規則為準。CPU 規則每一段忙碌只提出一次要求;之後別的同層規則提出要求,它就讓位。
- 最後才是依時間排程。
依程式自動切換是另一種思路:你指定的程式(例如剪片軟體)在前景時就切換,切到沒有規則的程式,就回到排程該套用的模式。兩者的差別在這裡:輸出影片時你切去看網頁,剪片軟體不在前景,依程式的規則就不再套用;CPU 規則看的是電腦忙不忙,跟前景是哪個程式無關。
常見問題
電腦睡眠醒來後,PowerDoze 的忙碌計時會接著算嗎?
不會。兩次讀取 CPU 使用率之間隔了超過 15 秒(例如睡眠醒來),或讀取失敗,計時都會從頭開始。
電腦正在忙的時候,按了首頁的「恢復排程」,會怎樣?
PowerDoze 會改回排程這個時段的模式,這一段忙碌也不會再切換;要等電腦閒下來、下一次再忙起來時,才會再切過去。這個按鈕在首頁寫著「排程規則……現在應套用……」的提示旁邊,沒有設排程就不會出現。
用電池的時候,PowerDoze 也會切到高效能嗎?
會。這個功能不分插電或用電池,也沒有分開設定的地方。筆電用電池時不想被切到高效能,就先把開關關掉。
Pro 到期後,這些設定會不見嗎?
不會。這個功能會暫停,但你的設定都保留著,有 Pro 之後會自動恢復。
我們還不能確定的地方
- 腳本裡切換電源計畫的那兩行(
powercfg /setactive),我們沒有在測試電腦上實際執行,因為那台電腦的電源設定不能被更改。你自己執行時,這兩行會真的切換你的電源計畫。讀 CPU 使用率的那一行和整段迴圈的判斷,我們都實際執行過;執行時,把負責切換的兩行換成印出文字。 - 「顯示卡很忙、CPU 使用率不高時不會切換」,是我們從 PowerDoze 只讀 CPU 使用率推論出來的。部分遊戲、用顯示卡算圖時可能會遇到,但我們沒有拿遊戲或算圖軟體實際測過。
- 這篇寫的 PowerDoze 行為,是我們照程式碼整理的,還沒有逐項實際操作驗證。
這篇的限制
你只是偶爾輸出一次影片的話,不需要任何自動切換。輸出前到「控制台 → 電源選項」選「高效能」,做完再選回「平衡」就好;或者在「設定 → 系統 → 電源和電池」把 Windows 的電源模式改成「最佳效能」(電源計畫是「平衡」或從平衡複製出來的計畫時,才能調整)。這兩個設定差在哪,這篇有說明。你不需要我們,也不需要多開一個腳本視窗。
想按一組鍵就切換,可以看用快速鍵切換電源計畫;想切過去、時間到自動換回來,可以看暫時切換電源計畫。
不管是腳本還是 PowerDoze,都只看 CPU 使用率。如果你的工作主要是顯示卡在忙,腳本和 PowerDoze 可能都不會切換。
不想每次轉檔前都記得切換,也不想一直開著一個 PowerShell 視窗?打開 PowerDoze 的「CPU 忙碌時自動切換」,電腦忙起來它就切過去,閒下來再交回給你的排程。