2010-12-15 17 views
5

que estoy usando para monitorear FileSystemWatcher carpeta A. si se crea o se copia en esa carpeta un archivo, éste se moverá a la carpeta B.FileSystemWatcher falla con 1000 archivos creaciones

he creado un archivo en la carpeta A por haciendo clic derecho, seleccionando "Nuevo", selecciona "Documento de texto". El archivo se mueve a la carpeta B inmediatamente. Pero si utilizo un programa para crear 1000 archivos en la carpeta A, entonces no se mueven a la carpeta B. Como parece, FileSystemWatcher no puede detectar 1000 archivos creados por el programa.

¿Alguien puede explicar esto por mí?

Respuesta

15

Parece que 1000 archivos sobrepasarán el búfer de FileSystemWatcher. Excelente explanation here.

Enlace Extracto:

tamaño del búfer y el error Evento

Los trabajos de clase FileSystemWatcher por capturar todo el archivo correspondiente y cambios de mayor edad y colocándolos en un búfer . Esto se procesa a continuación un cambio a la vez hasta que todas las notificaciones se hayan tratado y el búfer esté vacío. De forma predeterminada, el búfer interno tiene un tamaño de ocho kilobytes (8192 bytes). Cada evento puede tomar hasta dieciséis bytes de la memoria intermedia para sus datos, sin incluir el nombre de archivo . Esto significa que cuando hay una gran cantidad de cambios en en un corto período de tiempo de , el búfer puede convertirse rápidamente en sobrecargado y las notificaciones pueden perder .

Manejar el evento de error apropiado desde FileSystemWatcher le permitirá codificar esta posibilidad. P.ej. Examine y/o opere en la carpeta del evento de error con su propia lógica ...

+0

Gracias Paul, tienes razón. Después de aumentar el tamaño del búfer, mi programa se ejecuta correctamente. – Linh

Cuestiones relacionadas