我想編寫一個應用程序,它可以在整個計算機上的每個文件更改上獲取事件(以在文件位置/權限和我的應用程序的數據庫之間進行同步)。整個計算機的Filewatcher(可選?)
我想使用.NET filewatcher類的,但一些測試後,我發現了以下限制:
1)filewatcher具有緩衝(http://msdn.microsoft.com/en-us/ library/system.io.filesystemwatcher(v = vs.90).aspx):
如果在短時間內有很多更改,緩衝區可能會溢出。 這會導致組件忽略目錄中的更改, 並且它只會提供一攬子通知。增加 緩衝區的大小與InternalBufferSize屬性是昂貴的,因爲它 來自無法換出到磁盤的非分頁內存,因此 保持緩衝區儘可能小但足夠大,以不會錯過任何文件更改 事件。爲避免緩衝區溢出,請使用NotifyFilter和IncludeSubdirectories屬性,以便可以過濾出不需要的更改 通知。
因此,在整個計算機中,我可以獲得一些我需要處理的大量事件(峯值)。即使在事件處理中,我只是將事件信息添加到隊列中,我仍然可能會錯過事件。
2)Filewatcher有內存泄漏: http://connect.microsoft.com/VisualStudio/feedback/details/654232/filesystemwatcher-memory-leak 我檢查自己,這是真的,幾天後,我的進程內存從20MB增大到250MB
3)微軟說,我們應該使用filewatcher特定文件夾(我不知道爲什麼):
使用FileSystemWatcher監視指定目錄中的更改。
因此,由於這些原因,我需要一個替代解決方案來創建我的應用程序。我知道我可以寫一個驅動程序,但我更喜歡它是一個.net解決方案(當然,基於win32 api)。
感謝你的幫助, 歐米
爲什麼不使用[FileMon](http://technet.microsoft.com/zh-cn/sysinternals/bb896642)? – Oded 2012-02-08 15:56:33
我想在事件發生時在C#中實現我自己的邏輯,據我所知,filemon是一個獨立的軟件,對吧? – Omri 2012-02-08 15:58:58