Ich möchte eine Anwendung schreiben, die Ereignisse über jede Datei-Änderung auf dem gesamten Computer erhält (um zwischen Dateispeicherorten/Berechtigungen und der Datenbank meiner Anwendung zu synchronisieren).
Ich dachte an die Verwendung der .net filewatcher Klasse, aber nach einigen Tests fand ich die folgenden Einschränkungen:
1) Der Filewatcher hat einen Puffer (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.90).aspx):
Wenn es in kurzer Zeit viele Änderungen gibt, wird der Bu Dies führt dazu, dass die Komponente den Überblick über Änderungen im Verzeichnis verliert, und liefert nur noch pauschale Benachrichtigungen. Das Erhöhen der Größe des Puffers mit der Eigenschaft InternalBufferSize ist teuer, da er aus nicht ausgelagertem Speicher stammt, der nicht auf die Festplatte ausgelagert werden kann, also halten Sie den Puffer so klein, aber groß genug, um keine Datei-Änderungsereignisse zu Ereignisse zu verpassen. Zur Vermeidung eines b IncludeSubdirectories, damit Sie unerwünschte Änderungsmeldungen herausfiltern können Benachrichtigungen herausfiltern können.
Auf dem gesamten Computer kann ich also eine große Anzahl von Ereignissen (in der Spitze) erhalten, die ich verarbeiten muss. Selbst wenn innerhalb der Ereignisbehandlung ich nur die Ereignisinformationen zu einer Warteschlange hinzufügen, kann ich immer noch Ereignisse verpassen.
2) Filewatcher hat Speicherlecks: http://connect.microsoft.com/VisualStudio/feedback/details/654232/filesystemwatcher-memory-leak Ich habe es selbst überprüft und es ist wahr, nach ein paar Tagen wächst mein Prozessspeicher von 20MB auf 250MB
3) Microsoft sagt, dass wir filewatcher für bestimmte Ordner verwenden sollen (ich weiß nicht warum):
Verwenden Sie FileSystemWatcher, um auf Änderungen in einem bestimmten Verzeichnis zu achten.
Aus diesen Gründen brauche ich eine alternative Lösung, um meine Anwendung zu erstellen. Ich weiß, dass ich einen Treiber schreiben kann, aber ich bevorzuge es eine .net-Lösung zu sein (basierend auf win32 api, natürlich).
Ich danke Ihnen für Ihre Hilfe, Omri