禁用内置扩展比卸载第三方插件更有效,因GitHub Pull Requests、Jupyter等内置扩展即使未使用也会预加载服务并驻留内存;需通过Extensions: Show Built-in Extensions禁用非必要项,并彻底重启VSCode验证Extension Host内存下降。

禁用内置扩展比卸载第三方插件更有效
很多人盯着 marketplace 里装的插件猛删,却忽略 VSCode 自带的一堆“常驻后台监听器”。GitHub Pull Requests、Jupyter、Ember、PHP Language Features 这些内置扩展,哪怕你从不点开相关面板,也会在启动时注册文件监听、预加载语言服务、维持 WebSocket 连接——每项都吃内存。
按 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS),输入 Extensions: Show Built-in Extensions,搜索关键词后右键选择 Disable (Workspace) 或 Disable (Global)。重点关掉你明确不用的,比如纯前端项目就禁用 ms-python.python 和 ms-dotnettools.csharp。
禁用后必须完全退出 VSCode(不只是关闭窗口),再重新打开,否则旧进程仍驻留;观察 Developer: Open Process Explorer 中 Extension Host 的 RSS 是否下降 200MB+。
GitLens 和 ESLint 不是不能用,而是默认行为太莽
这两款插件常年霸榜内存占用 Top 3,但问题不在代码质量,而在默认开启的全量扫描策略:
-
gitlens.codeLens.enabled和gitlens.currentLine.enabled会在每行插入 DOM 节点,大文件下直接卡死;关掉后内存可降 30%–50% -
gitlens.advanced.caching.enabled默认为true,会缓存整个仓库历史树;设为false后首次点击变慢,但内存不再持续爬升 -
eslint.run设为"onType"会让每次按键都触发全文件解析;改成"onSave"或"onFocusChange"更合理 -
typescript.preferences.includePackageJsonAutoImports在auto模式下会主动加载所有@types包;设为"explicit"可避免 TSServer 启动时堆内存暴涨
所有配置必须写入项目根目录的 .vscode/settings.json,改完需重启工作区窗口才生效。
files.watcherExclude 配错等于没配
这是最常被抄错、也最致命的一条。VSCode 的文件监听基于 chokidar + 内核 inotify,一旦开始监听 node_modules,几万小文件会瞬间打爆句柄池,且几乎不回收——这不是插件的问题,是编辑器底层机制。
正确写法必须满足三点:
- 路径通配符用双星号开头:
"**/node_modules/**": true,单星号*/node_modules/*或漏掉末尾/**都无效 - 必须放在项目级
.vscode/settings.json中,全局设置不生效 - Linux 用户需检查
cat /proc/sys/fs/inotify/max_user_watches,若低于524288,运行echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches
常见漏项:"**/.pnpm/**": true(pnpm v7+)、"**/__pycache__/**": true(Python 项目)、"**/.git/objects/**": true(避免 Git 对象扫描)。
extensionHost 进程残留比内存泄漏更难察觉
你以为禁用了插件就万事大吉?未必。很多插件的 deactivate 函数没写清楚清理逻辑,导致 setInterval、TreeDataProvider、未注销的 onDidChangeTextDocument 监听器持续存活。这些引用不会随窗口关闭释放,而是堆积在 Extension Host 进程里,直到你手动杀掉它。
验证方法:
- 禁用插件后,终端执行
ps aux | grep 'extensionHost',看进程是否还在 - 若仍在,说明插件卸载逻辑有缺陷;临时方案是加启动参数
code --disable-extensions验证是否真由插件引起 - 开发或调试插件时,务必在
activate中把所有Disposable推入context.subscriptions,而不是自己维护数组
真正干净的插件管理,不是“装得少”,而是“退得清”。哪怕只多留一个未注销的监听器,几个月下来也能让 extensionHost 堆内存稳定在 1.6GB 以上——而这个数字,在 Developer: Open Process Explorer 里看起来只是“有点高”,没人会深究。


















