Pull to refresh

Снижаем потребление CPU в VS Code в 5 раз [Кратко]

Level of difficultyEasy
Reading time2 min
Views38K

Всем привет, недавно столкнулся с проблемой - рабочий ноутбук начал непривычно шуметь системой охлаждения. В диспетчере задач наблюдал следующую картину:

Никаких других окон, кроме пустого проекта открыто не было. На 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 $secondMostConsumingProcess.Id  -Force
  Write-Host $secondMostConsumingProcess.Id "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

Рис 2. Ищем нашу задачу
Рис 2. Ищем нашу задачу

После нажатия "Enter" находим нашу задачу и вызываем ее:

С первого раза не всегда работает, пока не очень понимаю, почему
С первого раза не всегда работает, пока не очень понимаю, почему

Попытка номер 2:

Результаты:

Диспетчер задач после выполнения скрипта
Диспетчер задач после выполнения скрипта

Диспетчер задач теперь отображает наиболее грузящими процессор служебные задачи:

Потеря Marketplace
Потеря Marketplace

Marketplace недоступен, но расширения работают (Тема OneDark Pro не слетела, проект в EIDE компилируется, шьется в микроконтроллер и работает Cortex-Debug):

Работа идет
Работа идет

Всем спасибо, что дочитали до конца, прошу поделиться, как можно улучшить данный способ, например, сделать запуск скрипта автоматическим при запуске VS Code, параметр "onStartup": "Run PowerShell Script" в tasks.json мне не помог.

upd: код PowerShell скрипта поправил, не все строчки скопировал из файла сначала

Tags:
Hubs:
Total votes 40: ↑35 and ↓5+37
Comments62

Articles