Le plus gros problème que j'ai rencontré est celui des fichiers manquants lorsque la mémoire tampon est pleine. Facile à résoudre, il suffit d'augmenter la mémoire tampon. N'oubliez pas qu'il contient les noms de fichiers et les événements, alors augmentez-le jusqu'au nombre de fichiers attendus (essais et erreurs). Il utilise de la mémoire qui ne peut pas être paginée, il peut donc forcer d'autres processus à paginer si la mémoire devient faible.
Voici l'article de MSDN sur la mémoire tampon : Propriété FileSystemWatcher..: :.InternalBufferSize
Selon MSDN :
L'augmentation de la taille de la mémoire tampon est coûteuse, car elle provient d'une mémoire non paginée qui ne peut pas être transférée sur le disque ; la mémoire tampon doit donc être aussi petite que possible. Pour éviter un débordement de la mémoire tampon, utilisez les propriétés NotifyFilter et IncludeSubdirectories pour filtrer les notifications de changement non souhaitées.
Nous utilisons 16 Mo en raison d'un lot important attendu en une seule fois. Il fonctionne parfaitement et ne manque jamais un fichier.
Nous lisons également tous les fichiers avant de commencer à en traiter un seul... nous mettons les noms de fichiers en cache (dans notre cas, dans une table de la base de données), puis nous les traitons.
Pour les problèmes de verrouillage de fichiers, je lance un processus qui attend que le fichier soit déverrouillé pendant une seconde, puis deux, puis quatre, etc. Nous nunca poll. Ce système est en production sans erreur depuis environ deux ans.