Das größte Problem, das ich hatte, ist das Fehlen von Dateien, wenn der Puffer voll ist. Einfach zu reparieren - erhöhen Sie einfach den Puffer. Denken Sie daran, dass es die Dateinamen und Ereignisse enthält. Erhöhen Sie es daher auf die erwartete Anzahl von Dateien (Versuch und Irrtum). Es wird Speicher verwendet, der nicht ausgelagert werden kann, sodass andere Prozesse möglicherweise zur Seite gezwungen werden, wenn der Speicher knapp wird.
Hier ist der MSDN-Artikel zum Puffer:
FileSystemWatcher .. ::. InternalBufferSize-Eigenschaft
Pro MSDN:
Das Erhöhen der Puffergröße ist teuer, da es aus nicht ausgelagertem Speicher stammt, der nicht auf die Festplatte ausgelagert werden kann. Halten Sie den Puffer daher so klein wie möglich. Verwenden Sie die Eigenschaften NotifyFilter und IncludeSubdirectories, um unerwünschte Änderungsbenachrichtigungen herauszufiltern, um einen Pufferüberlauf zu vermeiden.
Wir verwenden 16 MB aufgrund einer großen Charge, die auf einmal erwartet wird. Funktioniert gut und verpasst nie eine Datei.
Wir lesen auch alle Dateien, bevor wir anfangen, auch nur eine zu verarbeiten. Lassen Sie die Dateinamen sicher zwischengespeichert (in unserem Fall in eine Datenbanktabelle) und verarbeiten Sie sie dann.
Bei Problemen mit der Dateisperrung starte ich einen Prozess, der darauf wartet, dass die Datei entsperrt wird, und eine Sekunde, dann zwei, dann vier usw. wartet. Wir wählen nie ab. Dieser ist seit etwa zwei Jahren fehlerfrei in Produktion.