查找并消除大的内存占用_第1页
查找并消除大的内存占用_第2页
查找并消除大的内存占用_第3页
查找并消除大的内存占用_第4页
查找并消除大的内存占用_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、查找并消除大的内存占用 发布日期: 7/23/2004 | 更新日期: 7/23/2004Jon FincherMicrosoft Corporation摘要:Jon Fincher 介绍了有关在 Windows XP Embedded 设备上减小内存占用和提高运行库速度的提示、窍门和技术。欢迎再次阅读这一有关 Windows XP Embedded 的每月专栏文章(它的名称越来越不恰当)。上一月份的专栏文章没有确定最终期限,主要原因在于我当时是在德国慕尼黑参加 Devcon 欧洲大会。由于飞机晚点、时差以及仓促的旅行日程等因素,在我回来以后,我的生理时钟用了四天时间才恢复正常。然而,我的确不

2、希望错过这次环球旅行 我喜欢到德国访问,并且非常喜爱这一展览会。我所举办或参加的所有会议都吸引了大批客户,他们都是来享受免费食品以及与 Microsoft 工作人员进行自由交流的。我遇到了一些老朋友,结交了一些新朋友,并且在此期间将我的相机闪存卡用完了两三次 我现在正在盼望着明年再次到那里访问。好了,关于这次旅行的见闻就谈这么多。我希望能够深入研究 Devcon 巡回展览会自去年在拉斯维加斯启动以来涵盖的一些更多主题。本月,我们将讨论内存占用的减小,同时介绍一些提示、窍门和技术,以使您的运行库尽可能地小(和快速)。让我们开始吧。第一步 迁移到 SP1如果您要尝试减小内存占用,则第一步是升级到

3、Microsoft Windows XP Embedded with Service Pack 1。因为我们一直在 Windows XP Embedded with SP1 上工作,所以我们总是在竭力避免发生组件膨胀的情况。虽然我们首先关注的问题现在和将来都与功能有关,但我们也致力于使组件大小尽可能保持最小。事实上,我们发现所有组件的内存占用大小平均减小了 4.9 MB。与通过原始 Windows XP Embedded 工具和数据库运行的相同配置比较,带有 Microsoft Internet Explorer、Windows Media Player 和 MSN Messenger 的 M

4、inlogon 配置表明在运行库大小方面减小了 9 MB。我们所提供的数字是公平的 我们对每种方案都使用了标准的硬件配置文件,并对每种方案使用了相同的设置,包括将映像放在压缩的 NTFS 卷上。返回页首第二步 改变观察问题的角度事实上,减小内存占用的最复杂且最难成功的方法之一是我们的客户最经常使用的方法。该方法有几个方面: 向给定的配置中添加一切内容(因为您并不知道您可能需要什么),然后努力删除没有用的内容。 如果您的设备实际上将您的应用程序显示为自定义外壳程序,则在配置中包括一个外壳程序。 从导出自测试计算机的完整 PMQ 开始,包含与它发现的所有设备对应的条目,而无论它是否将存在于最终的设

5、备上。 包括组件化的(或安装在设备上的)应用程序,并包括每个选项以确保安全。 我喜欢将最后一个方法称为“雕刻大象”,就像笑话中所说的:“如何雕刻大象的雕像?拿一块大木头,然后切掉所有不像大象的部分。”任何曾经采用这一方法的人都知道,这会直接导致头发过早脱落、Pepto Bismol 的股票价值猛涨(因为您需要治疗溃疡)以及太多未完成的木头大象雕像。尝试在进行完整的依赖性检查之后修剪映像,类似于试图在将鸡蛋搅成糊后从蛋糊中向外挑拣蛋壳。您删除了一个组件,然后又由于依赖性检查需要该组件使得您重新安装它。您试图关闭自动解析,然后开始回答几百个有关您需要哪个组件的问题 并且您在一行中就要这么做五到十次

6、。最终您找到了一个要删除的父组件,但是发现内存占用的减小量赶不上它的增长量,因为造成了孤立组件。要生成小型运行库,最好的方法是从相反方向开始:不是雕刻大象,而是使用粘土塑造大象。返回页首从小到大,逐步完成使您的运行库变得更小的第一个重要窍门是,从您可以在您的设备上正常使用的最小运行库开始。这意味着获得可启动系统所需的最少数量的硬件,以及确保您的设备正常工作的最少量的功能。要获得尽可能小的硬件内存占用,将必须修剪由 TAP.EXE 生成的 PMQ。我总是建议使用 TAP.EXE 而不是 TA.EXE,因为使用 TAP.EXE 生成的 PMQ 时,您几乎总能确保拥有有效的配置。TA.EXE 生成的

7、 PMQ 通常不会产生无法完成重要工作的可启动系统。在生成 PMQ(在 Windows 2000、Windows XP 或 WinPE 环境下)之后,就可以打开组件设计器,并将 PMQ 导入到新的硬件组件中。请将硬件组件的原型设置为“Selector Prototype Component”。现在,您可以着手在该硬件组件中删除依赖项。通常,您可以安全地删除下列设备: 音频组件和编码解码器。 视频捕获和显示组件。 打印机。 软盘。 返回页首它只有一个按钮,并且我们在它离厂之前按下了这个按钮(含糊的 Dilbert 引用,为法律所要求 我必须将其包括于此。)如果您无法在您的设备上运行 TAP.EX

8、E,则您将有一些工作需要完成。您需要识别将要使用的设备中的所有硬件,并且手动为所有硬件添加驱动程序。尽管这对于网络适配器、视频卡甚至芯片组可能不是太困难,但某些设备却很难跟踪。您可能遇到的最糟糕的情形是,当您试图启动您认为完整的运行库时,得到的却是蓝屏。那么,现在该怎么办呢?您可以将我们的预定义基本配置之一作为起点,这些基本配置列在“Software:Test & Development”下面的组件浏览器中。这些示例宏可以启动所有能够启动 Windows XP 的可用硬件中的 99%,并且是很好的设备开发通用起点。使用这些宏的方法是:将它们添加到配置中,根据需要调整设置,然后生成和启动

9、。您应该发现,映像在多数设备上都能够启动,并且您将拥有某种可以作为起点的东西。最可贵的是,运行库以很小的规模启动。返回页首Win-Min 情况您将注意到的一件事情是,有两个类似的示例宏组件 一个名为 Minlogon Sample Macro,另一个名为 WinLogon Sample Macro。二者之间的根本区别是(一个具有 WinLogon,另一个具有 MinLogon),但也是深刻的。 当我们开始开发 Windows XP Embedded 时,我们注意到 winlogon.exe 具有许多静态和延迟加载依赖项,尤其是对于各种安全性 DLL。仅仅让计算机以其应该具有的方式登录(即使没有

10、外部网络连接)也会严重地消耗一些内存占用空间。我们决定对 winlogon.exe 进行少量修改,并得到了 minlogon.exe。它的静态和延迟加载依赖项大大减少,从而降低了内存占用的消耗,但它存在一个棘手的问题。MinLogon 的问题在于我们不再作为用户登录计算机。所有功能都在本地系统帐户(Windows XP 中内置的一个预定义帐户)的上下文中运行。本地系统可以访问系统中的所有内容(我是说“所有内容”),因此运行应用程序或者配置系统都不是问题。但是,因为不存在用户帐户(甚至没有 Administrator),MinLogon 系统中缺少所有与用户相关的内容。应用程序中任何依赖于当前用

11、户上下文的行为都可能将无法按预期方式工作。返回页首配置!配置!配置房地产行业的首要规则是位置!位置!位置。节约存储财产(即减小内存占用大小)的首要规则是配置!配置!配置。对,这将是一个比较冗长的话题,但请继续听我说下去。Windows XP Embedded with SP1 随附的大多数宏组件都具有一些设置,您可以对其进行配置以包括或删除这些组件所依赖的特定组件。通过检查这些宏的设置,您通常可以找到一两个不需要的依赖项。返回页首占用大量内存的组件一览在组件数据库中有一些导致大量内存占用的组件。这些组件是: Explorer 外壳程序 Internet Explorer .NET框架 正像前面

12、所提到的,生成您自己的外壳程序组件有助于将 Explorer 外壳程序置于配置外部,并使运行库保持较小的大小。.Net 框架目前是一个整体式组件 也就是说,所有东西都在它的内部,没有方法对其进行配置以便只获得它的某些部分。我们正在致力于解决这一问题,但是现在,如果您需要 .Net 支持,您还将占用较大的内存。Internet Explorer 可能是最难除去的内容,只是因为有那么多的内容依赖于它或它的某些部分。例如,我曾经尝试分析在 Windows XP Embedded 运行库上运行标准 Windows XP QFE 安装软件包所需要的依赖项。我发现我需要添加大约 120 MB 的额外组件以

13、支持 200 KB QFE 的安装。原因是对一个 DLL 的一个函数进行了调用,而该 DLL 是依赖于 Internet Explorer 的“帮助和支持服务”组件的一部分。下面列出那些将直接引入 Internet Explorer 的组件,供您参考: .NET 框架 R1507。 帮助和支持服务 R1507。 HTML 生成引擎 R1507。 IMAPI - CD 烧录 R1507。 Internet 连接向导 R1507。 Internet Explorer(附加支持)R1507。Internet Explorer R1507。 Internet Explorer 组策略支持 R1507。

14、 Internet Explorer 帮助文件 R620。 Internet Explorer 技术 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,后者将导致某种严重的内存膨胀。如果您可以避免使用这些组件,您应该完全能够防止 Internet Explorer 扩大您的内存占用量。返回页首越小越快减小内存占用量所带来的一个不太明显的优点是设备的性能会相应提高。但是,这一点并非那么难以观察到 内存占用量较小的运行库将加载较少的驱动程序、设备和服务,而这将占用较少的资源,从而意味着您的应用程序等将可以使用更多的资源。尽管如此,需要向您提出一些警告。如果您的磁盘驱动器是旧式的并且速度较

16、慢,则较小的内存占用量不会提供太多的帮助。无论映像或其媒体的大小如何,在 BIOS 和硬件检查完成之前,运行库都不会产生影响。而且,无论映像多么小,仍然需要花费一些时间来将您的自定义应用程序加载到内存中。软件只能为您做这么多。某些能够提高性能的方法也有助于使您的运行库变得小一些。请使用 MinLogon 而不是 WinLogon,因为 MinLogon 会加载较少的系统服务,并且已经表明能够使启动时间缩短将近十秒。将您的应用程序作为自定义外壳程序加载,因为您只需要加载一个而不是两个应用程序。使您的运行库中的设备尽可能地少,因为加载和初始化驱动程序需要消耗时间和资源。返回页首您是否感到一丝困倦?

17、是吗?好的,您不需要说出来 我的文章是很好的催眠药。我知道这一点,不需要提醒我。 1 080 既然我们已经非常舒服地睡了一觉,现在让我们讨论一个与提高启动速度不同的、更加难以理解的方案,即根本不启动 更准确地说,只启动一次,并且使用 ACPI Sleep 模式 (S3 来控制设备。基本设置如下所述:在设备上安置一个主电源按钮,以控制设备电源。请将其安置在不起眼的位置,例如设备的背面,并标以红色醒目告示:“Warning:Lark's Vomit”。(不必要的 Monty Python 引用,添加于此是为了符合联合国决议。)然后,在设备的正面安置一个按钮,用来触发设备 ACPI

18、 BIOS 以使该设备进入 Sleep 模式。为您的用户记录下这些开关。现在,您就拥有了一台能够快速关闭(通过进入 Sleep 模式)并且在第二次以及以后任何时候都能非常快速地启动(通过从 Sleep 模式中苏醒)的计算机。显然,这一解决方案需要设备中有 ACPI BIOS,并且可能需要设计第二个电源按钮,但几乎不需要完成其他工作。因为在 ACPI 电源状态中不涉及系统安全性,该解决方案将适用于 MinLogon 运行库。ACPI 本身具有最小的依赖项集,因此它不会使您的内存占用量膨胀。并且,如果您是从闪存启动,则借助于它的近似于零的延迟,您将不必花时间等待媒体旋转加速。返回页首但是,如果您的

19、要求较高,该怎么办呢? 如果您需要将您的计算机完全与外部电源断开,或者节约电池电源,则可以使用相同的设置,但需要进入 ACPI Hibernate (S4 模式而不是 Sleep 模式。它的管理难度要更大一点儿,但仍然可以做到。 Hibernate 要求系统安全性处于活动状态并运行,因此您不能使用 MinLogon 。除非您希望用户在每次通电时都登录(在 headless 或没有键盘的设备上应该很有趣),否则,您还必须添加并配置自动登录功能。在启动驱动器的根目录,还需要有足够的可用空间,以便在 hiberfil.sys 中保存完整的系统状态。然而,如果您能够满足这一条件,则您不仅可以实现相应的关闭机制,同时还能够快速且容易地启动。  60 返回页首 诊断一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论