有没有办法可以限制 VSCode 的“UI 更新频率”并特权输入响应能力?

有没有办法可以限制 VSCode 的“UI 更新频率”并特权输入响应能力?

我是一名盲打员,我感觉我经常必须与键盘“斗争”才能在 VS Code 中打字,因为在我导航时它正忙着“做事”。

(这有点类似于您在 Google 搜索中遇到的效果,搜索词的完成会干扰我的输入)。

例如,向下滚动一行,您将发现底部的状态栏正在更新行号和列号。如果您使用的语言受您的插件或基础语言服务器支持,则在顶部,您将看到您所在的文件、类和方法的面包屑。 是的,这很有用,但是它是否必须在每个向上/向下箭头上都更新?立即更新?

Intellisense 是其中另一个功能。输入print(Python,哇,你会立即看到一个下拉列表,其中包含它的参数。天哪,没有它我怎么过?大多数时候,我不得不esc摆脱这些下拉框。

我在中等大小的 Python 文件中比较了 Sublime Text 4 和 VScode。注意滚动的结果无需扩展。只需按住向下的箭头并观察需要多长时间才能到达底部。

# 55 VSCode sec to scroll 542 lines w 10 extensions enabled - holding arrow down
# 55 VSCode sec ,, with no enabled extensions
# 19 sec with Sublime Text

这不科学,但我确实开始关注 neovim,或者再次使用 Sublime。

我尝试设置延迟并禁用一些智能感知,但最终也禁用了代码片段,这是完全不行的。禁用 Pylance 也没有多大帮助。说到代码片段,有时我在代码片段触发器中输入代码,VSCode 很忙,tab 直到我等待 2-3 秒才执行任何操作。

我在配置 vscode 时是否遗漏了什么?我是否应该删除某个过时/混乱的缓存目录?我有一台 2019 MBP,配备 16GB RAM,性能绝佳。我意识到 vscode 不是性能的最佳选择,但向下滚动 500 行需要 55 秒,而 Sublime 只需 19 秒???

有没有办法说“每 250 毫秒刷新一次 Chrome 的 UI?” Web 开发人员使用 JS 库来取消弹跳并忽略紧接着的击键,这样他们就不会在每次击键时设置 Ajax 请求。

不能完全是 Electron 后端,例如,在浏览器中使用 Vivaldi 时,我的输入更加自由。此外,macos WindowServer 进程(据我所知,它处理屏幕组合)在使用 VS Code 时往往会消耗 CPU,比浏览器消耗的要多得多。

附言:这里的“UI 更新频率”是一个不太明确的术语。欢迎提出任何建议。

pps 这是我遇到的 VSCode 的主要(甚至是唯一)性能问题。启动时间、打开大文件等都不是问题……只是打字速度慢。我喜欢VScode!


非常抱歉。我应该提到我使用的是 macos。我没有在 Ask Different 上提问,因为我没有看到 VS Code 是特定于该应用程序的。不用担心答案提到 Windows 实用程序 - 我用过 Windows,对它们的比较有大致的了解。

答案1

据我所知,确实没有办法做到这一点。如果您想要提高性能,您可能可以更改控制台回滚和所有这些东西,但改变会很小。杀死所有不需要的进程可能会产生最大的效果。您可以使用以下命令批量杀死进程(确保 cmd 在管理员模式下打开):

任务列表(这样您就可以看到不需要的进程,或者您可以只使用任务管理器,无论哪种方式适合您)

taskkill/im{在此处插入进程名称。您可以在此处使用通配符,例如:a* 将杀死以 a 开头的任何进程,而 {wildcard}a{wildcard}(如果我将两个都放在字母周围,它会变成斜体)将杀死以 a 开头的任何进程,我想您现在已经了解了 *a 的含义。}/F(强制杀死它)

答案2

你可以改变一些Visual Studio 代码通过更新程序动态设置settings.json例如,使用 PowerShell 文件,我将在此为您提供一个示例。

由于您在原始问题中添加了 macOS 标签,因此我想为您提供 Microsoft 的指南在 macOS 上安装 PowerShell因为我提供了一个 PowerShell 解决方案。

步骤1

  • 制作一份备份%APPDATA%\Code\User\settings.json并将其存储在安全的地方。如果出现问题,您可以使用它来替换修改后的文件,以便快速恢复。

第2步

关键点考虑每用户和工作区设置发布与该答案相关的内容并切换 VSCode 设置:

  • 某些设置只能在settings.json以下情况下编辑:工作台:颜色定制并显示在 settings.json 中编辑设置编辑器中的链接。

  • 设置文件位置

    根据您的平台,用户设置文件位于此处:

    • 视窗: %APPDATA%\Code\User\settings.json
    • 苹果系统: $HOME/Library/Application\ Support/Code/User/settings.json
    • Linux: $HOME/.config/Code/User/settings.json
  • 重置所有设置

    虽然你可以通过设置编辑器单独重置设置 重置设定命令,您可以通过打开settings.json并删除括号之间的条目来 重置所有已更改的设置{}。请小心,因为无法恢复之前的设置值

  • 工作区设置

    工作区设置特定于项目,并可在项目开发人员之间共享。工作区设置会覆盖用户设置。

    笔记:VS Code“工作区”通常只是您的项目根文件夹。工作区设置以及调试任务配置存储在根.vscode文件夹中。您还可以通过名为 多根工作区

  • 工作区settings.json 位置

    与用户设置类似,工作区设置也存储在一个 settings.json文件中,您可以通过 首选项:打开工作区设置 (JSON)命令。

    工作区设置文件位于.vscode根文件夹下的文件夹下。

    文件资源管理器显示 .vscode 文件夹下的 settings.json

    笔记:为一个多根工作区,工作区设置位于工作区配置文件内。

    当您将工作区设置settings.json文件添加到项目或源代码控制时,该项目的设置将由该项目的所有用户共享。

电源外壳

笔记: 这只是一些选项的一个小例子,您必须弄清楚在您想要切换的用户设置级别适用的特定选项和其他选项。

## VSCode user settings settings.json
$filePath = "$env:APPDATA\Code\User\settings.json";

## Create a backup of the settings.json
$backupPath = "$env:APPDATA\Code\User\settings_backup.json";
Copy-Item -Path $filePath -Destination $backupPath -Force;

## Convert the JSON data to a PowerShell object
$json = Get-Content -Raw $filePath | ConvertFrom-Json;

## Add the new properties
$json | Add-Member -Type NoteProperty -Name "editor.wordWrap" -Value "off" -Force
$json | Add-Member -Type NoteProperty -Name "editor.minimap.enabled" -Value $false -Force
$json | Add-Member -Type NoteProperty -Name "editor.suggestSelection" -Value "first" -Force
$json | Add-Member -Type NoteProperty -Name "editor.tabCompletion" -Value "off" -Force
$json | Add-Member -Type NoteProperty -Name "editor.renderLineHighlight" -Value "none" -Force
$json | Add-Member -Type NoteProperty -Name "editor.scrollbar.horizontal" -Value "hidden" -Force
$json | Add-Member -Type NoteProperty -Name "editor.scrollbar.vertical" -Value "hidden" -Force
$json | Add-Member -Type NoteProperty -Name "editor.scrollBeyondLastLine" -Value $false -Force
$json | Add-Member -Type NoteProperty -Name "editor.renderControlCharacters" -Value $false -Force

## Convert back to JSON to the file
$json | ConvertTo-Json | Set-Content $filePath;

PowerShell(还原 - 删除显式属性)

笔记: 此恢复明确显示了从 JSON 中删除的属性设置。另一个简单但实​​用的解决方案是使用 将 JSON 设置文件的备份复制回其原始名称-Force

## VSCode user settings settings.json
$filePath = "$env:APPDATA\Code\User\settings.json";

## Create a backup of the settings.json
$backupPath = "$env:APPDATA\Code\User\settings_backup.json";
Copy-Item -Path $filePath -Destination $backupPath -Force;

## Convert the JSON data to a PowerShell object:
$json = Get-Content -Raw $filePath | ConvertFrom-Json;

## Remove properties
$json.PSObject.Properties.Remove('editor.wordWrap');
$json.PSObject.Properties.Remove('editor.minimap.enabled');
$json.PSObject.Properties.Remove('editor.suggestSelection');
$json.PSObject.Properties.Remove('editor.tabCompletion');
$json.PSObject.Properties.Remove('editor.renderLineHighlight');
$json.PSObject.Properties.Remove('editor.scrollbar.horizontal');
$json.PSObject.Properties.Remove('editor.scrollbar.vertical');
$json.PSObject.Properties.Remove('editor.scrollBeyondLastLine');
$json.PSObject.Properties.Remove('editor.renderControlCharacters');

## Convert back to JSON to the file
$json | ConvertTo-Json | Set-Content $filePath;

PowerShell(恢复 - 从备份恢复 settings.json)

笔记: 本次恢复将会使用settings.json的备份文件并将其恢复。

## VSCode user settings settings.json
$filePath = "$env:APPDATA\Code\User\settings.json";

## Create a backup of the settings.json
$backupPath = "$env:APPDATA\Code\User\settings_backup.json";
Copy-Item -Path $backupPath -Destination $filePath -Force;

支持资源

答案3

我对发布这个“解决方案”感到不好意思,但我发现在我重新启动机器后,VS Code 的表现要好得多。

人们不会指望在 2023 年,重新启动现代操作系统就能以某种方式解决速度减慢的问题这只影响 VS Code. 可能预期会出现较低级别或持续的系统错误,而不是用户级别的应用程序减速。

但事实确实如此。

我仍然认为,VS Code 应该能够优先处理输入而不是反馈导向的 UI 更新。尤其是当机器的 CPU 正在忙于编译或类似任务时。

答案4

错误报告 滚动和打字反应缓慢 #107016 就与这个问题有关。

该问题没有解决方案,只有变通方法,因为真正的解决方案必须来自 VScode 团队。

大多数解决方法似乎表明 VScode 在使用 GPU 时效率非常低。

据报道,以下开关可以提高性能:

  • --disable-gpu
  • --disable-gpu-compositing

对于 NVIDIA,一位用户通过创建 NVIDIA 配置文件解决了 NVIDIA 控制面板中的问题,code.exe该配置文件中只有一个设置0x10B135FE为 的设置0x00000000。据说此设置可以从 VScode 中删除默认帧速率限制。使用此配置文件,他的电脑上的问题得到了解决。

相关内容