.NET: FileSystemWatcher feuert keine Events bei zu vielen Dateien

Hier wieder ein Problem aus der Praxis:
Ich benutze einen FileSystemWatcher um ein Verzeichnis zu beobachten und auf neu erstellte Dateien zu reagieren.
Grob gesehen sieht das ganze wie folgt aus:

1
2
3
4
5
6
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"C:\tmp\in";
watcher.Filter = "*.*";
watcher.IncludeSubdirectories = false;
watcher.EnableRaisingEvents = true;
watcher.Created += new FileSystemEventHandler(watcher_Created);

In der watcher_Created() Methode befinder sich dann der Code der ausgeführt werden soll wenn eine neue Datei erstellt wurde.
Das ganze funktioniert auch problemlos – solange sich die Anzahl der neu erstellten Dateien in grenzen hält.
Erstellt man z.b. ca 60 Dateien in diesem Verzeichnis neu (z.b. Durch Strg+C / Strg+V), so wird nur die ERSTE Datei verarbeitet die vom FSW registriert wurde.

Dies liegt daran… dass der FileSystemWatcher einen internen Buffer hat.
Dieser betägt Standardmäßig 8 Kb und kann min 4kb bis max 64kb betragen.

Ändere ich die Größe meines FSW Beispiels von oben nun auf z.B. 32kb (32768 byte), können alle Events im Internen Buffer des FSW verareitet werden und es kann auf alle neu erstellten Dateien reagiert werden.
Die Änderung sieht für das oben genannte Beispiel wie folgt aus (insbesondere Zeile 5):

1
2
3
4
5
6
7
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"C:\tmp\in";
watcher.Filter = "*.*";
watcher.IncludeSubdirectories = false;
watcher.InternalBufferSize = 32768;
watcher.EnableRaisingEvents = true;
watcher.Created += new FileSystemEventHandler(watcher_Created);

leave your comment


*

Unterstütze den Frickelblog!