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