Considérations sur les modifications de fichiers dans des systèmes présentant un gros volume d'activités
Mise à jour : novembre 2007
Votre composant FileSystemWatcher est en mesure de recevoir un nombre très important d'événements, surtout si vous l'avez paramétré pour surveiller un répertoire présentant un trafic très élevé. Cela peut toutefois poser quelques problèmes dans la mesure où le composant FileSystemWatcher ne peut recevoir des notifications d'événement qu'à une cadence gérable. Si le taux d'entrées d'événement est supérieur au taux auquel le composant peut les recevoir, le surplus d'événements est stocké dans une mémoire tampon qui est ensuite passée au composant. Le composant convertit chaque entrée de la mémoire tampon en un événement à déclencher dans le code de l'utilisateur. Cette mémoire tampon peut poser un problème si sa capacité est dépassée. Si le nombre de modifications dans un répertoire est tellement élevé que la mémoire tampon ne peut les contenir toutes, le système d'exploitation émet une notification de saturation et le composant lève une exception.
Note de sécurité : |
---|
Une attaque par déni de service peut avoir lieu si un programme nuisible accède à un répertoire surveillé par votre composant FileSystemWatcher et génère un nombre de modifications trop important pour que le composant puisse les gérer. Suivez les recommandations de cette rubrique d'aide et utilisez des listes de contrôle d'accès de façon à réduire le risque d'une attaque par déni de service. |
Pour éviter ce problème, vous devez prendre plusieurs mesures. Avant tout, paramétrez une taille appropriée pour votre mémoire tampon en fonction du nombre approximatif d'événements que vous prévoyez de recevoir. Par défaut, la mémoire tampon a une capacité de 4 Ko. Une mémoire tampon de 4 Ko peut assurer le suivi de modifications dans approximativement 80 fichiers d'un répertoire. Chaque événement occupe 16 octets dans la mémoire tampon, plus suffisamment d'octets pour stocker le nom du fichier, au format Unicode (2 octets par caractère), lié à l'événement. Vous pouvez utiliser ces informations pour évaluer la taille de la mémoire tampon dont vous avez besoin.
Réinitialisez la taille de la mémoire tampon en paramétrant la propriété InternalBufferSize dans la fenêtre Propriétés. Si vous utilisez Microsoft Windows 2000, vous devez augmenter la taille de la mémoire tampon par incréments de 4 Ko dans la mesure où cela correspond à la taille de page par défaut du système d'exploitation. Avec tout autre système d'exploitation, vous devez augmenter la taille de la mémoire tampon par incréments qui correspondent à la taille de page par défaut de celui-ci.
Conseil : |
---|
Si vous n'êtes pas certain de la taille de page par défaut du système d'exploitation que vous utilisez, la solution la plus sûre consiste simplement à multiplier par deux la taille d'origine de la mémoire tampon. Cela permet de conserver l'intervalle d'origine requis pour votre système d'exploitation. |
Outre définir une taille de mémoire tampon appropriée, vous pouvez utiliser les trois propriétés suivantes pour contrôler le volume d'informations que la mémoire tampon reçoit :
Utilisez la propriété NotifyFilter pour déterminer si le composant FileSystemWatcher doit rechercher toutes les modifications ou uniquement les modifications données dans le répertoire surveillé.
Utilisez la propriété IncludeSubdirectories pour indiquer si vous souhaitez inclure les sous-répertoires du répertoire que vous surveillez. Si vous désactivez ce paramètre lorsque vous n'en avez pas besoin, vous recevez un nombre moins élevé d'événements que s'il était activé.
Si vous avez paramétré le composant FileSystemWatcher pour qu'il surveille l'événement Changed, vous pouvez utiliser la propriété NotifyFilter pour spécifier uniquement les événements qui vous intéressent.
Remarque : Bien que vous puissiez également utiliser la propriété Filter pour spécifier des fichiers ou sous-répertoires à surveiller, cette propriété est appliquée après l'ajout des modifications à votre mémoire tampon et elle ne réduit pas du tout la taille de celle-ci. Utilisez plutôt la propriété NotifyFilter pour contrôler la quantité d'informations écrites dans la mémoire tampon.
Voir aussi
Tâches
Comment : configurer des instances du composant FileSystemWatcher
Concepts
Introduction à la surveillance des événements de système de fichiers