[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


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".


More information about the Mono-devel-list mailing list