Considerazioni per la modifica di file in sistemi di grandi dimensioni
Aggiornamento: novembre 2007
Il componente FileSystemWatcher consente di ricevere un numero elevato di eventi, in particolare se è stato impostato per il controllo di una directory con un elevato traffico di dati. In tal caso, è possibile che si verifichino problemi, in quanto il componente FileSystemWatcher è in grado di ricevere le notifiche relative agli eventi solo in base a una frequenza tale da poter essere gestita. Se la frequenza con cui gli eventi vengono generati supera la frequenza con cui il componente è in grado di riceverli, gli eventi in eccesso verranno memorizzati in un buffer che verrà passato al componente in un secondo momento. Ciascuna voce del buffer viene convertita in un evento da generare per il codice dell'utente. È possibile che si verifichi un problema di overflow del buffer. Se il numero di modifiche in una directory è talmente elevato da superare la capacità del buffer, verrà fornita una notifica "generale" dal sistema operativo e verrà generata un'eccezione dal componente.
Nota sulla sicurezza: |
---|
È possibile che si verifichi un attacco Denial of Service se un programma dannoso ottiene l'accesso a una directory monitorata dal componente FileSystemWatcher e apporta un numero di modifiche tale da non poter essere gestite dal componente. Per ridurre il rischio di attacchi Denial of Service, attenersi ai suggerimenti riportati in questa pagina della Guida e utilizzare gli elenchi di controllo di accesso in modo appropriato. |
Per evitare questo problema, è necessario effettuare diverse operazioni. Impostare il buffer su una dimensione appropriata per il numero approssimativo di eventi che si prevede di ricevere. Per impostazione predefinita, il buffer viene impostato su una dimensione pari a 4 KB. Un buffer di 4 KB consente di tenere traccia delle modifiche apportate in circa 80 file all'interno di una directory. Ciascun evento nel buffer occupa 16 byte, più un numero di byte necessario per la memorizzazione del nome del file, in Unicode (2 byte per carattere), in cui l'evento viene generato. È possibile utilizzare queste informazioni per approssimare la dimensione del buffer necessaria.
Per reimpostare la dimensione del buffer, impostare la proprietà InternalBufferSize nella finestra Proprietà. Se si utilizza Microsoft Windows 2000, sarà necessario aumentare la dimensione del buffer a incrementi di 4 KB, un valore corrispondente alla dimensione della pagina predefinita del sistema operativo. Con qualsiasi altro sistema operativo è necessario aumentare la dimensione del buffer a incrementi corrispondenti alla dimensione della pagina predefinita del sistema operativo.
Suggerimento: |
---|
Se non si è certi della dimensione della pagina predefinita per il sistema operativo in uso, raddoppiare la dimensione originale del buffer. In questo modo sarà possibile mantenere l'intervallo originale necessario per il sistema operativo in uso. |
Oltre all'impostazione di una dimensione del buffer appropriata, è possibile utilizzare le seguenti tre proprietà per controllare la quantità di informazioni ricevute dal buffer:
Utilizzare la proprietà NotifyFilter per determinare se il componente FileSystemWatcher deve verificare nella directory tutte le modifiche o solo quelle specificate.
Utilizzare la proprietà IncludeSubdirectories per indicare se si desidera includere o meno le sottodirectory della directory controllata. Se si disattiva questa proprietà quando non è necessario utilizzarla, si riceverà un numero di eventi inferiore rispetto a quello ricevuto quando questa proprietà viene attivata.
Se il componente FileSystemWatcher è stato impostato per il controllo dell'evento Changed, è possibile utilizzare la proprietà NotifyFilter per specificare solo gli eventi di interesse.
Nota: Sebbene sia possibile utilizzare anche la proprietà Filter per specificare i file o le sottodirectory che si desidera controllare, questa proprietà viene applicata dopo l'aggiunta delle modifiche al buffer e non ne riduce la dimensione. Utilizzare pertanto la proprietà NotifyFilter per controllare la quantità di informazioni scritte nel buffer.
Vedere anche
Attività
Procedura: configurare istanze del componente FileSystemWatcher