在 Eclipse 上,“首选项 ->常规 -> 工作区 ->使用本机钩子或轮询刷新”有什么作用?

2022-09-03 06:29:32

Eclipse 上有以下复选框:

首选项 -> 常规 -> 工作区 -> 使用本机挂钩或轮询刷新

Eclipse文档说:

如果启用此选项,则工作区资源将使用本机刷新提供程序(在 Windows 上)或轮询机制自动与文件系统中的相应资源同步。

从文档和复选框描述中可以看出,Eclipse 使用某种操作系统挂钩来获取有关文件更改的通知。而且似乎此功能是在Windows以外的操作系统上使用轮询模拟的。

我的问题是:

  1. 这真的是Eclipse正在做的事情吗?我想知道通过选中此选项,我是否会有一个线程不断检查文件系统。我的文件在外部更改,但每天大约4次,为了使此功能对程序员来说看起来很好,轮询必须每分钟左右检查一次文件系统。
  2. 这真的只适用于Windows吗?如果我在Linux上使用Eclipse,这是否必然意味着Eclipse将进入轮询模式?
  3. 最后,也是更重要的一点,如果Eclipse做到了这一点,那么它是如何做到的呢?JNI?

答案 1

是的,这就是Eclipse正在做的事情。对于Mac或Linux,它目前使用轮询。

有一个扩展点可用于为每个平台提供刷新代码,并且人们已经为Mac和Linux编写了测试插件,但它们不在产品中(请参阅 https://bugs.eclipse.org/bugs/show_bug.cgi?id=108697https://bugs.eclipse.org/bugs/show_bug.cgi?id=237344org.eclipse.core.resources.refreshProviders )

其来源是 ,是否进行轮询刷新。org.eclipse.core.internal.refresh.MonitorManagerPollingMonitor

org.eclipse.core.internal.resources.refresh.win32.Win32RefreshProvider通过JNI使用本机方法进行Windows刷新(它位于仅限Windows的插件中)。

org.eclipse.core.internal.resources.refresh.win32.Win32Monitor并包含核心代码。Win32Natives


答案 2

我发现“使用本机钩子或轮询刷新”选项是执行此操作的原始方法:

以前的 Eclipse 版本依赖于本机刷新提供程序(在 Windows 上)或轮询机制来保持工作区与底层文件系统的同步。仍可通过选择“使用本机挂钩刷新”或在“打开首选项”页面“首选项”>“常规>工作区”上进行轮询来启用此功能。

现在,一种新的轻量级机制已经可用。工作区发现不同步的文件(例如,在编辑器访问文件内容时)将自动异步刷新。如果要以这种方式刷新文件,请转到打开首选项页面首选项>常规>工作区“,然后选择”访问时刷新”。

从现在开始,我将仅使用“访问时刷新”。


推荐