iT邦幫忙

0

Everything 掛著搜尋疑問

請問我 Everything 一直掛著搜尋
是否是定期執行搜尋,還是監聽事件windows有任何檔案新增才執行搜尋?
image

我很疑惑,它是用甚麼機制做到
我電腦檔案數2,603,802但內存才用0.6MB
請且我新增、修改檔案馬上在搜尋視窗同步顯示

image
image

假如是監聽事件,這樣等於為兩百多萬個檔案建立事件,不是很恐怖?
假如是定期搜尋,每N秒搜尋兩百多萬個檔案也同樣想想很恐怖...

1 個回答

6
暐翰
iT邦大師 1 級 ‧ 2020-09-17 08:42:05
最佳解答

看起來主要技術 Change Journal的Win32 API + USN,是先遍立後建立監控,但不是一個一個檔案建立監控,而是直接監控所有

使用原因

文件監控的應用,發現使用Windows API(ReadDirectoryChangesW)..如果變化量大又密集時,丟失通知現象很嚴重。..大部分的Windows用戶都轉到NTFS系統,所以打算採用分析NTFS的Change Journal(更改日誌)的方法實現監控功能。

Everything就是利用了NTFS系統的這個特性,通過讀取和監控USN(後面會講)而不是掃描文件來構建索引,所以搜索速度飛快

from NTFS Change Journal(USN Journal)詳解 - 簡書

有高手開源講解原理 yuzhengyang/Everything: 探索Everything背後的技術(USN和MFT)

擷取看到幾個重點

① 順序遍歷MFT上的每條數據, 從而快速獲得某個Volume上
的所有文件和文件夾的名字
② 通過等待Change Journal的下一條記錄來做到對NTFS文
件系統變化的監視

  • 得到 Volume 的句柄 ( via CreateFile 函數 )
  • 打開 Volume 上的 Change Journal
  • 針對不同的操作( 遍歷, 篩選, 等待新記錄等等)構造輸入
    參數的結構體
  • 調用 DeviceIoControl 函數
  • 分析輸出結果(通常是一片內存塊)
尼克 iT邦高手 1 級 ‧ 2020-09-17 10:18:44 檢舉

真是專業!

我要發表回答

立即登入回答