在Eclipse上,"首选项 - >常规 - >工作区 - >使用本机挂钩或轮询刷新"是做什么的?

Aki*_*ira 14 java eclipse

Eclipse上有这个复选框:

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

Eclipse文档说:

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

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

我的问题是:

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

gre*_*449 11

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

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

对此的来源是org.eclipse.core.internal.refresh.MonitorManager,PollingMonitor轮询是否刷新.

org.eclipse.core.internal.resources.refresh.win32.Win32RefreshProvider Windows是否通过JNI使用本机方法进行刷新(它仅在Windows插件中).

org.eclipse.core.internal.resources.refresh.win32.Win32MonitorWin32Natives包含核心代码.


Hen*_*usa 5

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

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

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

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

  • 但是,如果您向项目添加新文件,“访问时刷新”将不会更新。所以我已经选择并希望池化方法在可能的情况下利用轻量级机制。 (2认同)