2 Stimmen

Filewatcher für den gesamten Computer (Alternative?)

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

1voto

Eine Überwachung (insbesondere synchrone Benachrichtigungen) verlangsamt das System. Sie können wahrscheinlich unser CallbackFilter-Produkt verwenden, das einen Treiber und eine praktische .NET-API für die Verfolgung von Dateiänderungen bietet. Und CallbackFilter unterstützt asynchrone Benachrichtigungen, die schneller sind. Ermäßigte und kostenlose Lizenzen sind möglich.

0voto

Val Akkapeddi Punkte 1165

Versuchen Sie, dies über WMI zu tun - der folgende Link ist relevant: http://www.codeproject.com/Articles/42212/WMI-and-File-System-Monitoring

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X