Überlegungen zu Dateiänderungen auf Hochleistungssystemen

Aktualisiert: November 2007

Die FileSystemWatcher-Komponente muss unter Umständen eine sehr hohe Anzahl an Ereignissen verarbeiten, besonders dann, wenn Sie ein Verzeichnis mit sehr vielen Bewegungen ausgewählt haben. Dies kann zu Problemen führen, da die FileSystemWatcher-Komponente nur so viele Ereignisbenachrichtigungen entgegennehmen kann, wie sie verarbeiten kann. Wenn die Anzahl der ankommenden Ereignisse die Anzahl der Ereignisse übersteigt, die von der Komponente empfangen werden können, werden die überzähligen Ereignisse in einem Puffer zwischengespeichert und anschließend an die Komponente weitergeleitet. Die Komponente wandelt jeden Eintrag im Puffer in ein Ereignis um, das im Benutzercode ausgelöst werden muss. Problematisch wird es, wenn es zu einem Überlauf des Puffers kommt. Wenn die Anzahl der Änderungen in einem Verzeichnis so groß ist, dass nicht alle Änderungen im Puffer abgelegt werden können, gibt das Betriebssystem eine allgemeine Benachrichtigung aus, und die Komponente löst eine Ausnahme aus.

Sicherheitshinweis:

Ein Denial-of-Service-Angriff ist möglich, wenn ein bösartiges Programm auf ein durch die FileSystemWatcher-Komponente überwachtes Verzeichnis zugreifen kann und so viele Veränderungen generiert, dass die Komponente sie nicht bewältigen kann. Befolgen Sie die auf dieser Hilfeseite enthaltenen Empfehlungen, und verwenden Sie die Zugriffssteuerungslisten ordnungsgemäß, um das Risiko eines Denial-of-Service-Angriffs zu verringern.

Um dieses Problem zu vermeiden, sollten Sie mehrere Maßnahmen ergreifen. Zunächst sollten Sie sicherstellen, dass der Puffer groß genug für die zu erwartende Anzahl an eingehenden Ereignissen ist. Der Puffer ist standardmäßig auf 4 KB festgelegt. Ein Puffer von dieser Größe kann Änderungen an ca. 80 Dateien in einem Verzeichnis nachverfolgen. Für jedes Ereignis werden 16 Bytes im Puffer benötigt sowie genügend Bytes, um den Namen der Datei, die von dem Ereignis betroffen ist, in Unicode (2 Bytes pro Zeichen) zu speichern. Anhand dieser Informationen können Sie die Puffergröße Ihren Anforderungen entsprechend festlegen.

Um die Puffergröße zurückzusetzen, legen Sie im Eigenschaftenfenster die InternalBufferSize-Eigenschaft fest. Wenn Sie Microsoft Windows 2000 verwenden, sollten Sie die Puffergröße in Inkrementen von 4 KB vergrößern, da dies der Standardseitengröße des Betriebssystems entspricht. Bei allen anderen Betriebssystemen erhöhen Sie die Puffergröße in Inkrementen, die der jeweiligen Standardseitengröße des Betriebssystems entsprechen.

Tipp:

Wenn Sie nicht wissen, welche Standardseitengröße für das Betriebssystem verwendet wird, ist es am sichersten, die Originalgröße des Puffers einfach zu verdoppeln. Damit wird das ursprüngliche Intervall für das Betriebssystem beibehalten.

Sie können aber nicht nur die Puffergröße selbst festlegen, sondern auch die folgenden drei Eigenschaften verwenden, um die Informationsmenge zu steuern, die den Puffer erreicht:

  • Mit der NotifyFilter-Eigenschaft bestimmen Sie, ob die FileSystemWatcher-Komponente alle oder nur bestimmte Änderungen im überwachten Verzeichnis beachtet.

  • Mit der IncludeSubdirectories-Eigenschaft geben Sie an, ob die Unterverzeichnisse des überwachten Verzeichnisses ebenfalls berücksichtigt werden sollen. Falls Sie diese Eigenschaft deaktivieren, erhalten Sie weniger Ereignisse.

  • Wenn mit der FileSystemWatcher-Komponente nach dem Changed-Ereignis gesucht wird, geben Sie über die NotifyFilter-Eigenschaft an, welche Ereignisse relevant sind.

    Hinweis:

    Sie können auch mit der Filter-Eigenschaft Dateien oder Unterverzeichnisse angeben, die überwacht werden sollen. Jedoch wird diese Eigenschaft erst angewendet, wenn die Änderungen bereits im Puffer gespeichert sind, d. h. die Puffergröße wird dadurch nicht reduziert. Verwenden Sie stattdessen die NotifyFilter-Eigenschaft, um die Datenmenge zu steuern, die im Puffer gespeichert wird.

Siehe auch

Aufgaben

Gewusst wie: Konfigurieren von Instanzen von FileSystemWatcher-Komponenten

Konzepte

Einführung in die Überwachung von Dateisystemereignissen