Compartir a través de


Consideraciones sobre los cambios en archivos de sistemas de gran volumen

Actualización: noviembre 2007

El componente FileSystemWatcher puede recibir un enorme número de eventos, en especial si se configura para que inspeccione un directorio de tráfico muy intenso. Esto puede causar problemas, ya que el componente FileSystemWatcher sólo puede recibir notificaciones de eventos a una velocidad razonable. Si la velocidad a la que llegan los eventos supera la velocidad a la que puede recibirlos el componente, los eventos sobrantes se almacenan en un búfer que, a continuación, se pasa al componente. El componente convierte cada entrada del búfer en un evento que se produce para el código del usuario. Este búfer puede provocar un problema ya que puede desbordarse. Si el número de cambios de un directorio es tan grande que no caben todos en el búfer, el sistema operativo emitirá una notificación "general" y el componente producirá una excepción.

Nota de seguridad:

Puede producirse un ataque de denegación de servicio si un programa creado con fines malintencionados obtiene acceso a un directorio supervisado por el componente FileSystemWatcher y genera tantos cambios que el componente no puede administrarlos. Siga las recomendaciones que se ofrecen en esta página de Ayuda y utilice las listas de control de acceso según proceda para reducir el riesgo de un ataque de denegación de servicio.

Para evitar este problema, deberá hacer varias cosas. En primer lugar, debe establecer que el búfer tenga el tamaño adecuado para el número aproximado de eventos que espera recibir. De forma predeterminada, el tamaño del búfer se establece en 4 KB. Un búfer de 4 KB puede hacer un seguimiento de cambios en aproximadamente 80 archivos de un directorio. Cada evento ocupa 16 bytes en el búfer, más los bytes necesarios para almacenar el nombre del archivo, en Unicode (2 bytes por carácter), en el que se produjo el evento. Puede utilizar esta información para calcular aproximadamente el tamaño necesario del búfer.

Para restablecer el tamaño del búfer, defina la propiedad InternalBufferSize en la ventana Propiedades. Si está utilizando Microsoft Windows 2000, deberá aumentar el tamaño del búfer en incrementos de 4 KB, que corresponden al tamaño predeterminado de página del sistema operativo. Con otros sistemas operativos, deberá aumentar el tamaño del búfer en incrementos que correspondan al tamaño predeterminado de página del sistema operativo.

Sugerencia:

Si no conoce con seguridad el tamaño predeterminado de página del sistema operativo que está utilizando, el modo más seguro de proceder consiste en duplicar el tamaño original del búfer. De este modo mantendrá el intervalo original necesario para el sistema operativo.

Además de establecer un tamaño apropiado de búfer, puede utilizar las tres propiedades siguientes para controlar la cantidad de información que recibe el búfer:

  • Utilice la propiedad NotifyFilter para determinar si el componente FileSystemWatcher debe buscar en el directorio inspeccionado todos los cambios o sólo los especificados.

  • Utilice la propiedad IncludeSubdirectories para indicar si desea que se incluyan o no los subdirectorios del directorio que está inspeccionando. Si desactiva esta propiedad cuando no la necesite, recibirá menos eventos que si está activada.

  • Si ha establecido el componente FileSystemWatcher para que inspeccione el evento Changed, puede utilizar la propiedad NotifyFilter para especificar sólo los eventos en los que esté interesado.

    Nota:

    Aunque también puede utilizar la propiedad Filter para especificar los archivos o los subdirectorios que desea inspeccionar, esta propiedad se aplica después de que los cambios se agreguen al búfer y no reduce en absoluto el tamaño del mismo. En su lugar, utilice la propiedad NotifyFilter para controlar el volumen de información que se escribe en el búfer.

Vea también

Tareas

Cómo: Configurar instancias de componentes FileSystemWatcher

Conceptos

Introducción a la supervisión de eventos del sistema de archivos