149 votes

FileSystemWatcher vs polling pour surveiller les changements de fichiers

Je dois mettre en place une application qui surveille la création de fichiers dans un répertoire, à la fois localement et sur un lecteur réseau.

Le FileSystemWatcher ou l'interrogation d'une horloge serait la meilleure option. J'ai utilisé ces deux méthodes dans le passé, mais pas de manière intensive.

Quels sont les problèmes (performance, fiabilité, etc.) posés par l'une ou l'autre méthode ?

7voto

J'utilise actuellement le FileSystemWatcher sur un fichier XML mis à jour en moyenne toutes les 100 millisecondes.

J'ai constaté que tant que le FileSystemWatcher est correctement configuré, vous ne devriez jamais avoir de problèmes avec local des dossiers.

Je n'ai aucune expérience de l'observation de fichiers à distance et des partages non Windows.

Je considère que l'interrogation du fichier est redondante et ne vaut pas la peine d'être effectuée, à moins que vous ne vous méfiiez intrinsèquement de l'outil de gestion de l'information de l'entreprise. FileSystemWatcher ou ont expérimenté directement les limitations énumérées par tous les autres ici (partages non-Windows, et observation de fichiers à distance).

6voto

Jon Norton Points 2048

J'ai rencontré des problèmes en utilisant FileSystemWatcher sur les partages de réseau. Si vous êtes dans un environnement purement Windows, cela peut ne pas poser de problème, mais je surveillais un partage NFS et comme NFS est sans état, il n'y a jamais eu de notification lorsque le fichier que je surveillais a été modifié.

5voto

J'opterais pour les sondages.

Les problèmes de réseau provoquent la FileSystemWatcher n'est pas fiable (même en surchargeant l'événement d'erreur).

3voto

Treb Points 11153

J'ai rencontré de gros problèmes avec FSW sur des lecteurs réseau : La suppression d'un fichier provoquait toujours l'événement d'erreur, jamais l'événement de suppression. Je n'ai pas trouvé de solution, c'est pourquoi j'évite désormais FSW et j'utilise le polling.

Les événements de création, en revanche, ont bien fonctionné. Si vous avez besoin de surveiller uniquement la création de fichiers, vous pouvez donc opter pour le FSW.

De plus, je n'ai eu aucun problème avec les dossiers locaux, qu'ils soient partagés ou non.

3voto

spludlow Points 61

Le fait de revenir de la méthode de l'événement aussi rapidement que possible, en utilisant un autre fil, a résolu le problème pour moi :

private void Watcher_Created(object sender, FileSystemEventArgs e)
{
    Task.Run(() => MySubmit(e.FullPath));
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X