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

от автора

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

Никаких других окон, кроме пустого проекта открыто не было. На 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 скрипта поправил, не все строчки скопировал из файла сначала


ссылка на оригинал статьи https://habr.com/ru/articles/776062/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *