[Mono-dev] FileSystemWatcher Specific Implementation Check
Robert Jordan
robertj at gmx.net
Thu Aug 31 16:25:16 UTC 2017
On 29.08.2017 23:05, Rick Tillery wrote:
> In
> http://www.mono-project.com/docs/faq/technical/#what-are-the-issues-with-filesystemwatcher,
> it mentions:
>
>
> The Mono implementation of FileSystemWatcher has a number of
> backends, the most optimal one, the one with fewer dependencies is
> the inotify-backend (available in Mono 1.1.17 and newer versions).
>
> With this backend the kernel provides Mono with updates on any
> changes to files on the file system but it requires an
> inotify-enabled kernel, which only newer Linux distributions ship.
>
> In older Linux systems, you must have installed FAM or Gamin (it
> will work with either one). You might need the -devel packets installed.
>
> For the *BSD family, there’s a Kqueue based implementation that will
> be used when detected at runtime.
>
> If none of the above work, Mono falls back to polling the
> directories for changes, which far from optimal.
>
> Is there any way to determine, on a given system, which backend is being
> used?
>
> Specifically, I have to support a large number of Linux distros and
> versions going back a number of years, so I need to know that none of
> them are using polling.
You could access the static private field
System.IO.FileSystemWatcher.watcher
via reflection and then check its type:
---
using System;
using System.Reflection;
using System.IO;
class Test {
public static void Main ()
{
var fsw = new FileSystemWatcher ();
var fi = typeof (FileSystemWatcher).GetField
("watcher", BindingFlags.Static | BindingFlags.NonPublic);
Console.WriteLine (fi.GetValue (fsw).GetType ());
}
}
---
The polling watcher's class is "System.IO.DefaultWatcher".
Robert
More information about the Mono-devel-list
mailing list