FileSystemWatcher across the network(滿郵報以下)
我很抱歉, FileSystemWatcher.InternalBufferSize 的文件沒有說明有關監視網絡當 緩衝區的大小很清楚路徑。監測網絡路徑時建議不要超過64K 。
FileSystemWatcher基本上是一個。Net Win32的封裝器 ReadDirectoryChangesW API。要使用 ReadDirectoryChangesW,您創建並且 指定一個緩衝區,操作系統將使用這些更改填充 。然而, 什麼不 ReadDirectoryChangesW文件 中提到的(但在 FileSystemWatcher的文檔被暗示)是, 文件系統創建一個內部的內核 緩衝存儲的變化信息 暫時直到它有機會 更新用戶緩衝區。 的大小創建的內核緩衝區是 ,其大小與在 ReadDirectoryChangesW中指定的大小相同,並在非分頁池化內存中創建爲 。每創建一個FileSystemWatcher/ ReadDirectoryChangesW創建/ 調用,新的內核緩衝區也創建爲 。
內核存儲器池(分頁和 非分頁)在設備驅動程序和 使用其他內核組件系統 地址空間預留。他們 成長和收縮動態作爲 必要的。 管理器的「性能」選項卡上的 可輕鬆看到當前池的大小。這些池將動態增長 ,直到它們達到最大值 的值,該值在引導時間 處計算,並且取決於可用的系統資源(主要是RAM) 資源。你不要 想要達到這個最大值,否則 各種系統服務和驅動程序 將開始失敗。但是,這個 計算最大值不容易 可用。要確定池的最大大小,您需要使用內核 調試器。如果您對 有關係統 內存池的進一步信息感興趣,我建議您參考Moscress book 第7章中的第7章Solomon和 Russinovich。
考慮到這一點,沒有 推薦您可以使用什麼樣的大小緩衝區 。系統池的當前和最大尺寸將根據客戶的不同而不同,分別爲 。 但是,對於每個FileSystemWatcher/ ReadDirectoryChangesW緩衝區,您可能不應該使用 。 源於網絡訪問64k的限制 在ReadDirectoryChangesW中記錄的事實。 但最終你將有 測試預期目標系統的各種 的應用程序,以便您可以調整您的緩衝區 。
還有就是開銷與.net 應用相關的,我認爲一個 的Win32 ReadDirectoryChangesW程序 可能能夠達到更好的性能 用相同的緩衝區大小。 然而,隨着速度非常快,許多 文件的變化,緩衝區溢出將 不可避免的,開發商會 不得不處理的情況下發生 超限如手動 枚舉目錄檢測 的變化。
總之,FileSystemWatcher的和 ReadDirectoryChangesW是 輕量級的文件變化檢測 機制,都將有其侷限性 。更改日誌是 另一種機制,我們將 考慮一箇中等重量的解決方案,但 仍然有侷限性:
http://msdn.microsoft.com/en-us/library/aa363798%28VS.85%29.aspx
重量級的解決方案將是 寫一個專用的文件系統過濾 驅動程序坐在文件系統 堆棧和監視文件系統 的變化。當然這將是最複雜的方法。大多數病毒 掃描程序,備份軟件和文件 系統監控實用程序,如 的Filemon(www.sysinternals.com) 實現一個篩選器驅動程序。
我希望以上說明可以幫助您瞭解 您遇到的問題的根本原因 。請回復 讓我們知道您是否需要 更多信息。謝謝。
只需加入少量的:默認的緩衝區大小爲8192 – 2011-09-29 08:46:34