又一你不可不知道微軟神秘現象

| 1/16/2010
最近發現一件微軟的神秘設計。超級大 Bug!明顯到一個不可思議的程度。感謝我不認識的 Armlor 網友發現問題。

自從 XP 開始,大家可以針對每個資料夾裡面的內容作不同的顯示設定。好比如說,你 A 資料夾裡面放的是音樂、B 資料夾裡面是文件,這個時候你可以讓 A 資料夾檔案顯示的是音樂的長度、演唱者;而 B 資料夾則是作者、修改時間。不同的顯示方式讓你閱讀資料夾有很大的幫助。

可是,很讓人不感到意外的是(或者說是預料中事),微軟達到這個功能的實作方式是將每個資料夾的設定寫入註冊表裡面。這種作法跟現在很多作業系統的做法有很大的出入。當然這裡不是要談論誰是誰非的問題,而是如果你把所有的資訊寫入註冊表裡面,該註冊表就會被占用到很大一塊空間。很明顯的,如果我每次開啟資料夾的時候,他都得要去搜尋這個資料夾的顯示設定,當設定變的很龐大的時候就會拖垮系統的速度。那,微軟究竟是用什麼方式來解決這個問題呢?答案非常的一般,限制最大資料夾數,變數名稱是 BagMRU Size。說起來微軟好像很喜歡用限制數量的作法來達到各種目的,像是同時最大連線數 10 人的問題。

在 XP 時代,考量到當時系統效能的不足(我不懂為什麼不在個別資料夾放入設定檔,這種作法也不會花費到多少的空間),這個變數被設定在 400。雖然說我們可以透過修改註冊表的方式來改變這個變數,但是基本上考量到效能之外,依然是設定了一個上限。當你所使用的資料夾大於這個上限值的時候,系統就會根據一個不知道什麼的方法開始刪除掉某些資料夾的設定,並且用新的資料夾設定來取代他。至於這個不知名的辦法我實在無法理解是什麼。他寧可不去刪除已經不存在的資料夾的設定,也非要刪除掉我常用資料夾的設定。就這個樣子,我的資料夾顯示設定老是會自動跑掉,重新設定的動作煩不甚煩。尤其令人感到弔詭的是,微軟號稱這個數值在 Vista 的時候已經修改成 5000 了!5000 是多少?起碼對一般使用者來說是個足夠的數字了,但是顯示設定跑位的現象卻不見減少,反而有增加的趨勢!

探討這個問題,當然就是直接對 BagMRU Size 這個變數下手,我們找到了這個變數的位置 HKCU\Software\Microsoft\Windows\Shell 下面,很明顯的,確實有這個變數,且數值是設定在 5000 沒錯。既然這個數字設定的好好的,為什麼就是沒有用呢?Armlor 網友給了我們解答。他使用了 Process Monitor 去檢驗了 explorer.exe 程序,發現到在 Vista 下面,當你開啟資料夾的時候,他居然是在 HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell 資料夾下面檢察 BagMRU Size 變數,而不是上述的資料夾。簡單來說,Vista 裡面explorer.exe 寫入註冊表的地方是個新位置,卻沒有把變數設定在這個新的場所,反而是沿用了原先 XP 時代的註冊表設定(這時候我真想說,蘋果,你每次酸註冊表設計很爛是對的)。所以說每次當他尋找不到變數的時候,自然就以某個既定的預設大小來取代。至於這個大小是多少?不知道,總之很低就是了。

既然這樣,那解決辦法就很明顯了,只要在後面所述的位置加入一個名為BagMRU Size 的 DWORD 變數,並且設定成 5000、或者是一個大一點的數字就可以了。說真的,這個 Bug 還真讓人感到有點哭笑不得…超低級。

如果是 64bit 的作業系統,因為它同時會包含 explorer.exe,32bit 與 64bit 各一份,所以說還有另外一個位置需要修改 HKCU\Software\Classes\Wow6432Node\Local Settings\Software\Microsoft\Windows\Shell。話雖如此,我覺得這兩個位置的變數好像是同步的,有點怪怪,因為不太可能。不管怎樣,如果說你在這個資料夾下面沒有發現這個變數的話,那就自己新增一個吧!

沒有留言: