2010-05-29 44 views
2

我們正在爲我們的內部會計軟件包系統編寫一個類似於工具的文本編輯器,其中的操作可以通過我們自己的Xml語言規範完成。這些宏命令是在Xml文件中指定的,我們需要能夠監視打開的文件是否有外部修改的bean。多個FileSystemWatchers監視本地系統上的文件?

唯一的問題是,可能有20-30個文件在任何時候打開不同的路徑。在這種情況下使用多個FileSystemWatchers會不錯?或者,最好是監控根驅動器並捕獲與編輯器中打開文件相匹配的特定事件(儘管可能會引發大量事件)。

一些是本地驅動器(C,D,E),另一些是它們的網絡驅動器(U,X,G,H)。文件也相當矮大約300-400Kb。

回答

0

我認爲你幾乎肯定需要多個觀察者。 FileSystemWatcher的緩衝區可能會溢出,您可能會錯過其他事件,您可以更改緩衝區大小(使用InternalBufferSize),但只能高達64KB。

但是,要知道,FileSystemWatcher使用FindFirstChangeNotification這是不是網絡驅動器完全可靠的(尤其是在重負載下,但可能過於否則),所以你必須想到和規劃,你將不會從收到的每個事件網絡,我的理解是,如果你有多個觀察者,可靠性會變得更糟。

所以總而言之,我認爲你必須增加緩衝區,儘可能地過濾掉,然後儘可能少地使用監視器,而不要溢出緩衝區,所以可能需要一些試驗和錯誤爲了正確。

+0

感謝您的回覆,我只是意識到我還沒有登錄:(無所謂,我很好奇記事本++如何維護什麼文件打開,如果他們被修改或不等等。 – 2010-05-29 08:14:20

1

首先幾個事實

1 FileSystemWatcher的是圍繞ReadDirectoryChanges包裝
2- ReadDirectoryChanges創建籽粒緩衝區緩存來自非分頁池內存事件每次調用ReadDirectoryChanges

的上面第2點的含義是FileSystemWatcher的每個實例將從非分頁池中分配內存。請記住,這是用於內核模式驅動程序等的內存,雖然它可以動態擴展,但它基於系統資源在啓動時計算出的最大大小「很難」受到限制(機器有多少內存)。

因此,鑑於上述情況,我會考慮以下幾點。

如果您希望看到的更改量。如果這個數值很低,請選擇具有最小緩衝區大小的多個觀察者。

另外請記住,如果您決定採用較大的緩衝區,監控網絡驅動器不支持超過64K的緩衝區大小,大於此值並且您不會收到事件。

相關問題