客户端启动性能优化实践

https://blog.csdn.net/yujiankk/article/details/17251529

https://blog.csdn.net/jsutluo/article/details/6725461

https://blog.csdn.net/suhuaiqiang_janlay/article/details/51934024

https://code.google.com/archive/p/sawbuck/wikis/SyzygyDesign.wiki

http://blog.gclxry.com/chromium-syzygy-optimization/


优化方案:
1、主要的优化方法和优化的核心思路
(1)优化 启动 的主要方法:
  • dll 基址固定
  • dll 延迟加载
  • dll 文件预读
  • 程序二进制文件连续分布
  • 二进制文件relink
  • 启动逻辑优化调整
(2)优化的核心思路:
  • 减少文件io
  • 减少page fault
  • 减少磁盘跨磁道操作
  • 启动逻辑前移,先显示ui,后加载逻辑

2、从技术上优化
(1)对程序的启动过程中,磁盘碎片文件优化
WIN32程序启动过程包括: 操作系统把程序加载到内存,并建立相应的运行环境;应用程序自身的初始化过程。 作系统加载器的加载过程是,把磁盘中可执行程序的物理文件读入内存,并转换成程序在内存中的表示。而安装包解压完安装文件后,安装文件可能存在一定量的文件碎片,导致一个逻辑上连续的文件,在磁盘上由很多不连续的碎片组成,导致执行IO时需要过多的寻道时间。 可以让安装包安装完成后,将我们安装目录下的文件进行碎片整理下,加快以后的启动速度。
优化方法:
a、修改安装包的解压接口,在文件解压的时候,保证连续的写到硬盘上。
b、 采用开源工具,在安装完后,用此工具对安装后的文件目录进行一次碎片整理
(2)冷启耗时优化, (主要针对第一次启动或者安装完成后的启动优化)
程序的冷启,就是在计算机启动后 程序的第一次启动,这时调用的大部分代码和数据在内存中是没有的,那么 就会产生页缺失的硬中断,需要从磁盘中把数据读进内存中,众所周知,磁盘 IO 的 速度相比内存是非常慢的,于是程序的冷启就会相对慢一些。
可以针对****.exe的PE文件缺页情况下 ,将所有函数按启动过程调用顺序进行二进制重组,也会 有一定的性能提
(3)模块加载优化
使用Rebase.exe工具,修改所有***.exe的 各模块的首选基地址,以免某些模块不被加载到首选基地址上, 提高系统性能。使用Bind.exe工具,***.exe执行模块绑定操作,加快启动后的加载dll速度。

3、从业务逻辑加载上优化
以界面显示优化原则,现有的加载业务逻辑顺序是: 处理完之后才会显示出主界面。需要将这个顺序根据功能逻辑再改动一下:在 **.dll中优先创建窗口,其他功能逻辑可以等主界面显示出来后再进行相关的初始化。这种改动的缺点是,代码改动大,牵扯到的业务广,复杂化了代码逻辑,耗时很长,对整个应用框架几乎是推倒重来。建议作为长期的优化方向。
底层框架也需要继续发掘优化速度。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值