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
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.dot.net
http://lists.dot.net/mailman/listinfo/mono-devel-list

Reply via email to