3 回答

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
我看到文件系統(tǒng)觀察器在生產(chǎn)和測(cè)試環(huán)境中失敗了。我現(xiàn)在認(rèn)為它很方便,但我認(rèn)為它不可靠。我的模式是使用文件系統(tǒng)觀察程序來監(jiān)視更改,但偶爾進(jìn)行輪詢以捕獲丟失的文件更改。
編輯:如果您有用戶界面,您還可以讓用戶“刷新”更改而不是輪詢。我會(huì)將它與文件系統(tǒng)觀察器結(jié)合起來。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
我遇到的最大問題是當(dāng)緩沖區(qū)滿了時(shí)丟失文件。很容易修復(fù) - 只需增加緩沖區(qū)。請(qǐng)記住,它包含文件名和事件,因此請(qǐng)將其增加到預(yù)期的文件數(shù)量(試用和錯(cuò)誤)。它確實(shí)使用了無法分頁的內(nèi)存,因此如果內(nèi)存不足,它可能會(huì)強(qiáng)制其他進(jìn)程進(jìn)行分頁。
這是關(guān)于緩沖區(qū)的MSDN文章: FileSystemWatcher .. ::。InternalBufferSize屬性
每個(gè)MSDN:
增加緩沖區(qū)大小是昂貴的,因?yàn)樗鼇碜詿o法換出到磁盤的非分頁內(nèi)存,因此請(qǐng)盡可能減小緩沖區(qū)。要避免緩沖區(qū)溢出,請(qǐng)使用NotifyFilter和IncludeSubdirectories屬性過濾掉不需要的更改通知。
由于一次預(yù)計(jì)會(huì)有大量批次,我們使用16MB。工作正常,永遠(yuǎn)不會(huì)錯(cuò)過文件。
我們還在開始處理之前讀取了所有文件,即使只有一個(gè)......將文件名安全地緩存(在我們的例子中,放入數(shù)據(jù)庫表中)然后處理它們。
對(duì)于文件鎖定問題,我產(chǎn)生了一個(gè)進(jìn)程,它等待文件解鎖等待一秒鐘,然后是兩秒鐘,然后是四個(gè)等等。我們從不投票。這已經(jīng)生產(chǎn)了大約兩年沒有錯(cuò)誤。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
的FileSystemWatcher
也可能錯(cuò)過在繁忙時(shí)間的變化,如果排隊(duì)改變的次數(shù)溢出提供的緩沖液中。這不是.NET類本身的限制,而是基礎(chǔ)Win32基礎(chǔ)結(jié)構(gòu)的限制。根據(jù)我們的經(jīng)驗(yàn),最小化此問題的最佳方法是盡快將通知出列并在另一個(gè)線程上處理它們。
如上面的@ChillTemp所述,觀察者可能無法處理非Windows共享。例如,它在安裝的Novell驅(qū)動(dòng)器上根本不起作用。
我同意一個(gè)很好的折衷方案是偶爾進(jìn)行民意調(diào)查,以便找出任何錯(cuò)過的變化。
- 3 回答
- 0 關(guān)注
- 379 瀏覽
添加回答
舉報(bào)