Снижаем потребление CPU в VS Code в 5 раз [Кратко]
- понедельник, 27 ноября 2023 г. в 00:00:14
Всем привет, недавно столкнулся с проблемой - рабочий ноутбук начал непривычно шуметь системой охлаждения. В диспетчере задач наблюдал следующую картину:
Никаких других окон, кроме пустого проекта открыто не было. На StackOverflow, было предложено запустить без расширений и посмотреть потребление (идентичное в моём случае), отключить автообновление расширений, но мне эти способы не помогли.
В какой — то момент решил сыграть в «Дженгу» — остановить процесс, нагружающий компьютер и посмотреть, что «отвалится».
Внезапно — на первый взгляд ничего: ни тема не слетела, ни проекты на EIDE не перестали компилироваться, все работало штатно, даже отладчик Cortex‑Debuger.
Но не работает Marketplace.
Он не отображает список установленных Расширений (они всегда в 0) и не позволяет их отключать/подключать.
Но зато ЦПУ загружен на 10 — 12% в режиме простоя, кулеры сами по себе перестали работать спустя 30 секунд.
Но ведь это не по‑программистски каждый раз в Диспетчер задач залезать, открывать дерево процессов, останавливать Marketplace, ведь так?
Нужен скрипт, который можно добавить в tasks.json
$vsCodeProcess = Get-Process | Sort-Object -Property CPU -Descending | Select-Object -First 1
if($vsCodeProcess.Name -eq "Code")
{
Stop-Process -Id $vsCodeProcess.Id -Force
Write-Host $vsCodeProcess.Name "Successfully stopped"
}
else{
Write-Host "No Code to stop"
$secondMostConsumingProcess = Get-Process | Sort-Object -Property CPU -Descending | Select-Object -Skip 1 -First 1
if($secondMostConsumingProcess.Name -eq "Code")
{
Stop-Process -Id $vsCodeProcess.Id -Force
Write-Host $vsCodeProcess.Name "Successfully stopped"
}
}
Сначала я рассчитывал, что всегда на вершине сортированного списка процессов по потреблению ЦПУ будет именно VS Code, но так было не всегда, поэтому добавил проверку по имени приложения и повторный поиск.
Осталось запустить скрипт. В tasks.json добавляем следующее, предварительно создав в папке файл "taskkill.ps1" в моем случае.
{
"label": "Run PowerShell Script",
"type": "shell",
"command": "powershell.exe",
"args": ["-File", "${workspaceFolder}/taskkill.ps1"],
"group": {
"kind": "build",
"isDefault": true
}
}
Теперь, когда task создана, ее можно вызвать через Ctrl + Shift + P
После нажатия "Enter" находим нашу задачу и вызываем ее:
Попытка номер 2:
Результаты:
Диспетчер задач теперь отображает наиболее грузящими процессор служебные задачи:
Marketplace недоступен, но расширения работают (Тема OneDark Pro не слетела, проект в EIDE компилируется, шьется в микроконтроллер и работает Cortex-Debug):
Всем спасибо, что дочитали до конца, прошу поделиться, как можно улучшить данный способ, например, сделать запуск скрипта автоматическим при запуске VS Code, параметр "onStartup": "Run PowerShell Script" в tasks.json мне не помог.
upd: код PowerShell скрипта поправил, не все строчки скопировал из файла сначала