2012-03-16 40 views
3

我的FileSystemWatcher出現問題。什麼是FileSystemWatcher InternalBufferSize的理想大小?

我有一個應用程序需要在短時間內監視文件夾中已創建的大量文件。

當我開始開發它時,我意識到很多文件沒有被通知,如果我的緩衝區小於64kb,這是微軟推薦的。我試圖增加超過這個緩衝區的大小,直到我達到了爲我工作的值,這是2621440字節!

對於這種情況,您可以推薦使用小尺寸,或者緩衝區的理想尺寸是什麼?

我的示例代碼:

WATCHER = new FileSystemWatcher(SignerDocument.UnsignedPath, "*.pdf"); 
WATCHER.InternalBufferSize = 2621440; //Great and expensive buffer 2.5mb size! 
WATCHER.IncludeSubdirectories = true; 
WATCHER.EnableRaisingEvents = true; 
WATCHER.Created += new FileSystemEventHandler(watcher_Created); 
WATCHER.Renamed += new RenamedEventHandler(watcher_Renamed); 

什麼微軟說這個在.NET 2.0:

增加緩衝區的大小是昂貴的,因爲它來自非分頁內存 不能換因此請儘可能將緩衝區保持爲小於 。爲避免緩衝區溢出,請使用NotifyFilter和IncludeSubdirectories屬性來過濾不需要的更改 通知。 鏈接:FileSystemWatcher.InternalBufferSize Property

回答

4

對於您可能要選擇「定期掃描」的方法,而不是即時通知如此巨大的工作量。您可以例如每隔5秒掃描一次目錄並處理添加的文件。如果在處理文件後將文件移動到其他目錄,則您的週期性工作負載甚至可能變得最小。

這也是一種更安全的方法,因爲即使您的處理代碼崩潰,您也可以隨時恢復,與通知不同,您的檢查點不會丟失。