Windows 很大程度上依賴註冊表來儲存小塊信息,例如電腦的 IP 位址。 Unix、Linux 和 OS-X 將所有內容儲存在普通檔案中。
當談到註冊表時,我發現它有幾個問題:
獲取資訊並不那麼容易。例如,如果機器無法啟動,並且我嘗試透過將磁碟安裝在不同的機器上以從不同的作業系統(是另一個 Windows 還是 Linux)存取它來解決問題,我可以輕鬆存取所有檔案( (權限和加密除外),但是對於註冊表,雖然理論上可以讀取(並且可能更改)它,但它需要額外的應用程式。
命令列訪問(在機器不再啟動的情況下)是不可能的(除非也有用於此目的的應用程序,但我很確定安裝和使用這些應用程序比簡單地訪問磁碟上的文件要困難得多)。
資訊可以位於文件中,也可以位於註冊表中,因此必須兼顧兩個位置。
處理檔案時使用的常用工具(例如
findstr
,Windows 的弟弟grep
)在處理登錄項目時不存在。
我確信,如果微軟最初實施了註冊表,那是有充分理由的,並且相對於當時的其他作業系統,Windows 具有(即使是輕微的)競爭優勢。
我考慮了效能和空間限制,這在Windows 誕生時尤其重要,但我不明白在註冊表中儲存某些內容如何提高效能或減少使用的空間(將DWORD 作為實際的DWORD 儲存在登錄中與將其字串表示形式儲存在註冊表中)檔案會節省空間,但即使在 1985 年,這有那麼重要嗎?
從安全角度來看,看起來也沒有什麼差別。我不確定 1985 年的情況是否如此,但今天的基於文件的權限看起來與註冊表項實現的權限一樣強大(如果不是更強大的話)。
組織也類似:基於樹的結構,沒有索引/搜尋功能(而更高版本的 Windows 在文件上實現索引)。
那麼,與將所有內容儲存在文件中相比,註冊表的好處是什麼?
答案1
在微軟開始使用註冊表之前,他們有INI文件(文字檔)。他們發現僅使用 INI 文件開發一個好的平台非常困難,因為:
- 支援 Unicode 並不容易。
它是一個文字文件,因此權限是在文件層級設定的,而不是在金鑰層級設定的。有權存取該文件的人都可以存取其中的所有參數。
如果兩個執行緒嘗試同時更新 INI 文件,它們可能會意外刪除另一個執行緒所做的變更。
- 程式可以以獨佔模式開啟 INI 檔案並鎖定其他人。
- INI 檔案僅包含字串。如果要儲存二進位數據,則必須以某種方式將其編碼為字串。
- 解析 INI 檔案的速度很慢。
- INI 文件的集中管理很困難。由於它們可以位於系統中的任何位置,因此網路管理員無法編寫腳本來檢查應用程式狀態並升級過時的應用程式。
- 系統開始是多用戶的,並且控制每個用戶的設定開始變得勢不可擋。這意味著有時需要為每個使用者提供單獨的 INI 檔案。
這些是影響 Microsot 尋找新解決方案的要點,它們隨註冊表一起提供。註冊表是一個資料庫,因此它解決了先前的問題,但創建了新的:
- 這是單點故障。
- 它是二進制的。一旦損壞,徒手修復是非常困難的。
- 將其設定放在註冊表中的應用程式的可移植性較差。
- 複雜的導航。
歸功於重要來源:http://blogs.msdn.com/b/oldnewthing/archive/2007/11/26/6523907.aspx