查找并消除大的內(nèi)存占用_第1頁
查找并消除大的內(nèi)存占用_第2頁
查找并消除大的內(nèi)存占用_第3頁
查找并消除大的內(nèi)存占用_第4頁
查找并消除大的內(nèi)存占用_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、查找并消除大的內(nèi)存占用 發(fā)布日期: 7/23/2004 | 更新日期: 7/23/2004Jon FincherMicrosoft Corporation摘要:Jon Fincher 介紹了有關(guān)在 Windows XP Embedded 設(shè)備上減小內(nèi)存占用和提高運行庫速度的提示、竅門和技術(shù)。歡迎再次閱讀這一有關(guān) Windows XP Embedded 的每月專欄文章(它的名稱越來越不恰當)。上一月份的專欄文章沒有確定最終期限,主要原因在于我當時是在德國慕尼黑參加 Devcon 歐洲大會。由于飛機晚點、時差以及倉促的旅行日程等因素,在我回來以后,我的生理時鐘用了四天時間才恢復正常。然而,我的確不

2、希望錯過這次環(huán)球旅行 我喜歡到德國訪問,并且非常喜愛這一展覽會。我所舉辦或參加的所有會議都吸引了大批客戶,他們都是來享受免費食品以及與 Microsoft 工作人員進行自由交流的。我遇到了一些老朋友,結(jié)交了一些新朋友,并且在此期間將我的相機閃存卡用完了兩三次 我現(xiàn)在正在盼望著明年再次到那里訪問。好了,關(guān)于這次旅行的見聞就談這么多。我希望能夠深入研究 Devcon 巡回展覽會自去年在拉斯維加斯啟動以來涵蓋的一些更多主題。本月,我們將討論內(nèi)存占用的減小,同時介紹一些提示、竅門和技術(shù),以使您的運行庫盡可能地?。ê涂焖伲W屛覀冮_始吧。第一步 遷移到 SP1如果您要嘗試減小內(nèi)存占用,則第一步是升級到

3、Microsoft Windows XP Embedded with Service Pack 1。因為我們一直在 Windows XP Embedded with SP1 上工作,所以我們總是在竭力避免發(fā)生組件膨脹的情況。雖然我們首先關(guān)注的問題現(xiàn)在和將來都與功能有關(guān),但我們也致力于使組件大小盡可能保持最小。事實上,我們發(fā)現(xiàn)所有組件的內(nèi)存占用大小平均減小了 4.9 MB。與通過原始 Windows XP Embedded 工具和數(shù)據(jù)庫運行的相同配置比較,帶有 Microsoft Internet Explorer、Windows Media Player 和 MSN Messenger 的 M

4、inlogon 配置表明在運行庫大小方面減小了 9 MB。我們所提供的數(shù)字是公平的 我們對每種方案都使用了標準的硬件配置文件,并對每種方案使用了相同的設(shè)置,包括將映像放在壓縮的 NTFS 卷上。返回頁首第二步 改變觀察問題的角度事實上,減小內(nèi)存占用的最復雜且最難成功的方法之一是我們的客戶最經(jīng)常使用的方法。該方法有幾個方面: 向給定的配置中添加一切內(nèi)容(因為您并不知道您可能需要什么),然后努力刪除沒有用的內(nèi)容。 如果您的設(shè)備實際上將您的應(yīng)用程序顯示為自定義外殼程序,則在配置中包括一個外殼程序。 從導出自測試計算機的完整 PMQ 開始,包含與它發(fā)現(xiàn)的所有設(shè)備對應(yīng)的條目,而無論它是否將存在于最終的設(shè)

5、備上。 包括組件化的(或安裝在設(shè)備上的)應(yīng)用程序,并包括每個選項以確保安全。 我喜歡將最后一個方法稱為“雕刻大象”,就像笑話中所說的:“如何雕刻大象的雕像?拿一塊大木頭,然后切掉所有不像大象的部分。”任何曾經(jīng)采用這一方法的人都知道,這會直接導致頭發(fā)過早脫落、Pepto Bismol 的股票價值猛漲(因為您需要治療潰瘍)以及太多未完成的木頭大象雕像。嘗試在進行完整的依賴性檢查之后修剪映像,類似于試圖在將雞蛋攪成糊后從蛋糊中向外挑揀蛋殼。您刪除了一個組件,然后又由于依賴性檢查需要該組件使得您重新安裝它。您試圖關(guān)閉自動解析,然后開始回答幾百個有關(guān)您需要哪個組件的問題 并且您在一行中就要這么做五到十次

6、。最終您找到了一個要刪除的父組件,但是發(fā)現(xiàn)內(nèi)存占用的減小量趕不上它的增長量,因為造成了孤立組件。要生成小型運行庫,最好的方法是從相反方向開始:不是雕刻大象,而是使用粘土塑造大象。返回頁首從小到大,逐步完成使您的運行庫變得更小的第一個重要竅門是,從您可以在您的設(shè)備上正常使用的最小運行庫開始。這意味著獲得可啟動系統(tǒng)所需的最少數(shù)量的硬件,以及確保您的設(shè)備正常工作的最少量的功能。要獲得盡可能小的硬件內(nèi)存占用,將必須修剪由 TAP.EXE 生成的 PMQ。我總是建議使用 TAP.EXE 而不是 TA.EXE,因為使用 TAP.EXE 生成的 PMQ 時,您幾乎總能確保擁有有效的配置。TA.EXE 生成的

7、 PMQ 通常不會產(chǎn)生無法完成重要工作的可啟動系統(tǒng)。在生成 PMQ(在 Windows 2000、Windows XP 或 WinPE 環(huán)境下)之后,就可以打開組件設(shè)計器,并將 PMQ 導入到新的硬件組件中。請將硬件組件的原型設(shè)置為“Selector Prototype Component”。現(xiàn)在,您可以著手在該硬件組件中刪除依賴項。通常,您可以安全地刪除下列設(shè)備: 音頻組件和編碼解碼器。 視頻捕獲和顯示組件。 打印機。 軟盤。 返回頁首它只有一個按鈕,并且我們在它離廠之前按下了這個按鈕(含糊的 Dilbert 引用,為法律所要求 我必須將其包括于此。)如果您無法在您的設(shè)備上運行 TAP.EX

8、E,則您將有一些工作需要完成。您需要識別將要使用的設(shè)備中的所有硬件,并且手動為所有硬件添加驅(qū)動程序。盡管這對于網(wǎng)絡(luò)適配器、視頻卡甚至芯片組可能不是太困難,但某些設(shè)備卻很難跟蹤。您可能遇到的最糟糕的情形是,當您試圖啟動您認為完整的運行庫時,得到的卻是藍屏。那么,現(xiàn)在該怎么辦呢?您可以將我們的預(yù)定義基本配置之一作為起點,這些基本配置列在“Software:Test & Development”下面的組件瀏覽器中。這些示例宏可以啟動所有能夠啟動 Windows XP 的可用硬件中的 99%,并且是很好的設(shè)備開發(fā)通用起點。使用這些宏的方法是:將它們添加到配置中,根據(jù)需要調(diào)整設(shè)置,然后生成和啟動

9、。您應(yīng)該發(fā)現(xiàn),映像在多數(shù)設(shè)備上都能夠啟動,并且您將擁有某種可以作為起點的東西。最可貴的是,運行庫以很小的規(guī)模啟動。返回頁首Win-Min 情況您將注意到的一件事情是,有兩個類似的示例宏組件 一個名為 Minlogon Sample Macro,另一個名為 WinLogon Sample Macro。二者之間的根本區(qū)別是(一個具有 WinLogon,另一個具有 MinLogon),但也是深刻的。 當我們開始開發(fā) Windows XP Embedded 時,我們注意到 winlogon.exe 具有許多靜態(tài)和延遲加載依賴項,尤其是對于各種安全性 DLL。僅僅讓計算機以其應(yīng)該具有的方式登錄(即使沒有

10、外部網(wǎng)絡(luò)連接)也會嚴重地消耗一些內(nèi)存占用空間。我們決定對 winlogon.exe 進行少量修改,并得到了 minlogon.exe。它的靜態(tài)和延遲加載依賴項大大減少,從而降低了內(nèi)存占用的消耗,但它存在一個棘手的問題。MinLogon 的問題在于我們不再作為用戶登錄計算機。所有功能都在本地系統(tǒng)帳戶(Windows XP 中內(nèi)置的一個預(yù)定義帳戶)的上下文中運行。本地系統(tǒng)可以訪問系統(tǒng)中的所有內(nèi)容(我是說“所有內(nèi)容”),因此運行應(yīng)用程序或者配置系統(tǒng)都不是問題。但是,因為不存在用戶帳戶(甚至沒有 Administrator),MinLogon 系統(tǒng)中缺少所有與用戶相關(guān)的內(nèi)容。應(yīng)用程序中任何依賴于當前用

11、戶上下文的行為都可能將無法按預(yù)期方式工作。返回頁首配置!配置!配置房地產(chǎn)行業(yè)的首要規(guī)則是位置!位置!位置。節(jié)約存儲財產(chǎn)(即減小內(nèi)存占用大?。┑氖滓?guī)則是配置!配置!配置。對,這將是一個比較冗長的話題,但請繼續(xù)聽我說下去。Windows XP Embedded with SP1 隨附的大多數(shù)宏組件都具有一些設(shè)置,您可以對其進行配置以包括或刪除這些組件所依賴的特定組件。通過檢查這些宏的設(shè)置,您通??梢哉业揭粌蓚€不需要的依賴項。返回頁首占用大量內(nèi)存的組件一覽在組件數(shù)據(jù)庫中有一些導致大量內(nèi)存占用的組件。這些組件是: Explorer 外殼程序 Internet Explorer .NET框架 正像前面

12、所提到的,生成您自己的外殼程序組件有助于將 Explorer 外殼程序置于配置外部,并使運行庫保持較小的大小。.Net 框架目前是一個整體式組件 也就是說,所有東西都在它的內(nèi)部,沒有方法對其進行配置以便只獲得它的某些部分。我們正在致力于解決這一問題,但是現(xiàn)在,如果您需要 .Net 支持,您還將占用較大的內(nèi)存。Internet Explorer 可能是最難除去的內(nèi)容,只是因為有那么多的內(nèi)容依賴于它或它的某些部分。例如,我曾經(jīng)嘗試分析在 Windows XP Embedded 運行庫上運行標準 Windows XP QFE 安裝軟件包所需要的依賴項。我發(fā)現(xiàn)我需要添加大約 120 MB 的額外組件以

13、支持 200 KB QFE 的安裝。原因是對一個 DLL 的一個函數(shù)進行了調(diào)用,而該 DLL 是依賴于 Internet Explorer 的“幫助和支持服務(wù)”組件的一部分。下面列出那些將直接引入 Internet Explorer 的組件,供您參考: .NET 框架 R1507。 幫助和支持服務(wù) R1507。 HTML 生成引擎 R1507。 IMAPI - CD 燒錄 R1507。 Internet 連接向?qū)?R1507。 Internet Explorer(附加支持)R1507。Internet Explorer R1507。 Internet Explorer 組策略支持 R1507。

14、 Internet Explorer 幫助文件 R620。 Internet Explorer 技術(shù) R1507。 Microsoft Vector Graphics Rendering (VML R1507。MSN Explorer R1507。 Outlook Express R1507。 Shell 命名空間擴展 R1507。 Soap 客戶端運行庫 R620。 Windows .NET 消息管理 R1507。 Windows Media Player 8.0 R1507。 Windows Update Automatic Updates R1507。 Windows Update Ba

15、se R1507。 Windows Update Shortcut R1507。 向您的運行庫中添加上述任何組件都會自動引入 Internet Explorer,后者將導致某種嚴重的內(nèi)存膨脹。如果您可以避免使用這些組件,您應(yīng)該完全能夠防止 Internet Explorer 擴大您的內(nèi)存占用量。返回頁首越小越快減小內(nèi)存占用量所帶來的一個不太明顯的優(yōu)點是設(shè)備的性能會相應(yīng)提高。但是,這一點并非那么難以觀察到 內(nèi)存占用量較小的運行庫將加載較少的驅(qū)動程序、設(shè)備和服務(wù),而這將占用較少的資源,從而意味著您的應(yīng)用程序等將可以使用更多的資源。盡管如此,需要向您提出一些警告。如果您的磁盤驅(qū)動器是舊式的并且速度較

16、慢,則較小的內(nèi)存占用量不會提供太多的幫助。無論映像或其媒體的大小如何,在 BIOS 和硬件檢查完成之前,運行庫都不會產(chǎn)生影響。而且,無論映像多么小,仍然需要花費一些時間來將您的自定義應(yīng)用程序加載到內(nèi)存中。軟件只能為您做這么多。某些能夠提高性能的方法也有助于使您的運行庫變得小一些。請使用 MinLogon 而不是 WinLogon,因為 MinLogon 會加載較少的系統(tǒng)服務(wù),并且已經(jīng)表明能夠使啟動時間縮短將近十秒。將您的應(yīng)用程序作為自定義外殼程序加載,因為您只需要加載一個而不是兩個應(yīng)用程序。使您的運行庫中的設(shè)備盡可能地少,因為加載和初始化驅(qū)動程序需要消耗時間和資源。返回頁首您是否感到一絲困倦?

17、是嗎?好的,您不需要說出來 我的文章是很好的催眠藥。我知道這一點,不需要提醒我。 1 080 既然我們已經(jīng)非常舒服地睡了一覺,現(xiàn)在讓我們討論一個與提高啟動速度不同的、更加難以理解的方案,即根本不啟動 更準確地說,只啟動一次,并且使用 ACPI Sleep 模式 (S3 來控制設(shè)備?;驹O(shè)置如下所述:在設(shè)備上安置一個主電源按鈕,以控制設(shè)備電源。請將其安置在不起眼的位置,例如設(shè)備的背面,并標以紅色醒目告示:“Warning:Lark's Vomit”。(不必要的 Monty Python 引用,添加于此是為了符合聯(lián)合國決議。)然后,在設(shè)備的正面安置一個按鈕,用來觸發(fā)設(shè)備 ACPI

18、 BIOS 以使該設(shè)備進入 Sleep 模式。為您的用戶記錄下這些開關(guān)?,F(xiàn)在,您就擁有了一臺能夠快速關(guān)閉(通過進入 Sleep 模式)并且在第二次以及以后任何時候都能非??焖俚貑樱ㄍㄟ^從 Sleep 模式中蘇醒)的計算機。顯然,這一解決方案需要設(shè)備中有 ACPI BIOS,并且可能需要設(shè)計第二個電源按鈕,但幾乎不需要完成其他工作。因為在 ACPI 電源狀態(tài)中不涉及系統(tǒng)安全性,該解決方案將適用于 MinLogon 運行庫。ACPI 本身具有最小的依賴項集,因此它不會使您的內(nèi)存占用量膨脹。并且,如果您是從閃存啟動,則借助于它的近似于零的延遲,您將不必花時間等待媒體旋轉(zhuǎn)加速。返回頁首但是,如果您的

19、要求較高,該怎么辦呢? 如果您需要將您的計算機完全與外部電源斷開,或者節(jié)約電池電源,則可以使用相同的設(shè)置,但需要進入 ACPI Hibernate (S4 模式而不是 Sleep 模式。它的管理難度要更大一點兒,但仍然可以做到。 Hibernate 要求系統(tǒng)安全性處于活動狀態(tài)并運行,因此您不能使用 MinLogon 。除非您希望用戶在每次通電時都登錄(在 headless 或沒有鍵盤的設(shè)備上應(yīng)該很有趣),否則,您還必須添加并配置自動登錄功能。在啟動驅(qū)動器的根目錄,還需要有足夠的可用空間,以便在 hiberfil.sys 中保存完整的系統(tǒng)狀態(tài)。然而,如果您能夠滿足這一條件,則您不僅可以實現(xiàn)相應(yīng)的關(guān)閉機制,同時還能夠快速且容易地啟動。  60 返回頁首 診斷一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論