VS代码消耗了大量的CPU资源-主要是因为文件监视器。文件监视器是做什么的?在react代码中,我们已经有了热加载,我们真的需要这个吗?我们如何才能完全停止文件监视器?我试图在files.watcherExclude中添加“*“模式来停止文件监视器,但我不知道它是否真的工作。
files.watcherExclude
*
wn9m85ua1#
VS代码中的FileWatchers ...监视文件。FileSystemWatcher接口的VS代码API文档规定:文件系统监视器通知磁盘上或来自其他FileSystemProviders的文件和文件夹的更改。这应该回答了你的问题,文件观察者做什么。createFileSystemWatcher工作区函数的The VS Code API docs非常详细:创建一个文件系统监视器,根据提供的参数通知该监视器发生文件事件(创建、更改、删除)。默认情况下,将递归监视所有打开的工作区文件夹中的文件更改。这是意料之中的。不然VS Code怎么实现像资源管理器视图这样的东西呢?(当文件和目录被添加、删除、重命名、移动等时,它会自动更新。)对于使用此API来执行诸如提供智能感知之类的操作的扩展,它们如何知道您何时使用它们支持的编程/标记语言创建、编辑或删除了文件,以便将该信息挂钩到它们用来提供智能感知功能的其余软件中?你说:我尝试在files.watcherExclude中添加"*"模式以停止文件监视器,但我不知道它是否真的工作。请参见createFileSystemWatcher文档的此部分:通过提供具有要监视的base路径的RelativePattern,可以为文件监视添加附加路径。如果pattern是复杂的(例如,包含**或路径段),则将递归地监视该路径,否则将非递归地监视该路径(即,将仅报告对路径的第一级的改变)。VS代码和使用VS代码API的扩展可以覆盖files.watcherExclude的设置。createFileSystemWatcher文档:
FileWatchers
FileSystemWatcher
FileSystemProviders
createFileSystemWatcher
base
pattern
**
node_modules
.git
但是createFileSystemWatcher文档警告用户尽量减少使用:如果可能的话,尽量少用递归监视器,因为递归文件监视占用大量资源。[...]
因此,在您认为适合您的项目的地方使用files.watcherExclude设置,并相信VS Code和您的扩展会做正确的事情。如果您确实注意到它们在某些领域是"浪费"的,这些领域适用于所有VS Code用户,而不仅仅适用于您和您的项目,那么您可以向VS Code或提供案例和证据的扩展提交问题单。现在,如果您不仅是扩展或VS代码的 * 用户 *,而且正在开发VS代码或这些扩展,那么在不再需要FileSystemWatcher时,处理它的方法是使用它的dispose方法。额外花絮:如果你想了解一些关于文件监视器是如何实现的,请参见VS Code wiki中的这个页面:https://github.com/microsoft/vscode/wiki/File-Watcher-Issues
dispose
1条答案
按热度按时间wn9m85ua1#
VS代码中的
FileWatchers
...监视文件。FileSystemWatcher
接口的VS代码API文档规定:文件系统监视器通知磁盘上或来自其他
FileSystemProviders
的文件和文件夹的更改。这应该回答了你的问题,文件观察者做什么。
createFileSystemWatcher
工作区函数的The VS Code API docs非常详细:创建一个文件系统监视器,根据提供的参数通知该监视器发生文件事件(创建、更改、删除)。
默认情况下,将递归监视所有打开的工作区文件夹中的文件更改。
这是意料之中的。不然VS Code怎么实现像资源管理器视图这样的东西呢?(当文件和目录被添加、删除、重命名、移动等时,它会自动更新。)
对于使用此API来执行诸如提供智能感知之类的操作的扩展,它们如何知道您何时使用它们支持的编程/标记语言创建、编辑或删除了文件,以便将该信息挂钩到它们用来提供智能感知功能的其余软件中?
你说:
我尝试在files.watcherExclude中添加"
*
"模式以停止文件监视器,但我不知道它是否真的工作。请参见
createFileSystemWatcher
文档的此部分:通过提供具有要监视的
base
路径的RelativePattern,可以为文件监视添加附加路径。如果pattern
是复杂的(例如,包含**
或路径段),则将递归地监视该路径,否则将非递归地监视该路径(即,将仅报告对路径的第一级的改变)。VS代码和使用VS代码API的扩展可以覆盖
files.watcherExclude
的设置。createFileSystemWatcher
文档:base
路径的递归文件监视器的请求。但是,始终支持非递归文件监视器,即使在打开的工作空间内也是如此,因为它们允许绕过配置的排除设置(files.watcherExclude
)。如果您需要在通常被排除的位置(例如node_modules
或.git
文件夹)进行监视,则可以在工作区中使用非递归监视器来实现此目的。但是
createFileSystemWatcher
文档警告用户尽量减少使用:如果可能的话,尽量少用递归监视器,因为递归文件监视占用大量资源。
[...]
files.watcherExclude
有助于减少来自已知会同时产生许多文件更改的文件夹的文件事件的开销(例如node_modules
文件夹)。因此,强烈建议使用不需要递归监视器的简单模式进行监视,在递归监视器中,排除设置被忽略,并且您可以完全控制那些事件。因此,在您认为适合您的项目的地方使用
files.watcherExclude
设置,并相信VS Code和您的扩展会做正确的事情。如果您确实注意到它们在某些领域是"浪费"的,这些领域适用于所有VS Code用户,而不仅仅适用于您和您的项目,那么您可以向VS Code或提供案例和证据的扩展提交问题单。现在,如果您不仅是扩展或VS代码的 * 用户 *,而且正在开发VS代码或这些扩展,那么在不再需要
FileSystemWatcher
时,处理它的方法是使用它的dispose
方法。额外花絮:如果你想了解一些关于文件监视器是如何实现的,请参见VS Code wiki中的这个页面:https://github.com/microsoft/vscode/wiki/File-Watcher-Issues