缩减dll加载时内存占用

缩减dll加载时内存占用,可以通过两个方面去处理:

1.    减少dll物理大小;

2.    减少dll依赖的dll个数。

 

一、减少dll物理大小

dll由数据段和代码段组成,故可以从减少数据段和代码段两个方面入手

1.处理头文件中的静态全局变量

将在头文件中定义的静态全局变量,改为在头文件中声明,源文件中定义。

——此方法修改起来相对较快,dll缩减幅度最大

(如果其他dll中要用到这些静态变量,需要导出)

2.处理源文件中的静态全局变量

将在多个源文件中都定义过的相同静态全局变量,改为在一个文件的头文件中声明,源文件中定义。之后,哪个文件要用这个静态变量,就引用对应的头文件。

——次方法比较耗时,操作起来相当无聊

3.去除无用头文件

去除头文件、源文件中包含的无用头文件。

可以用以下两个工具协助发现无用头文件:

1) ReSharper:一个VS插件,代码中无用的头文件,会用灰色背景显示。

 

A.    优点:

Ø  支持在头文件、源文件中检索无用头文件

B.    缺点:

Ø  检索结果一般都是准确的,但会有许多无用头文件没有检索出来;

Ø  只能一个文件一个文件的处理。

2)       cxx-clean-include:国人写的一个小工具,可以部署到VS中。

A.  优点:

Ø  可以删除整个项目或单个文件中的无用头文件

Ø  比起ReSharper,能检索出更多的头文件

B.   缺点:

Ø  有误报,误报率大概为30%左右,需要手动干预。操作前一定要备份代码;

Ø  小的demo项目,可以删除头文件中的无用头文件,但对于大的项目,不会对头文件做处理;

——这种方法,操作工作量与最终效果,仅次于删除头文件中的静态变量

4. 删除无用代码

删除代码中的无用的代码,主要是接口。可以用代码覆盖率工具协助。

5. 代码重构,合并接口

针对相同代码较多的接口,可以合并,提炼公共接口。

——这种方法,需要在平时持续做。短时间内无法解决dll大的问题。

 

二、减少dll依赖的dll个数

一个dll如果依赖其他dll,加载该dll时也会加载其依赖的dll,从而增大加载dll时的内存开销。

1.   删除无用的dll依赖。在vs的附加依赖项中删除。

 

2.   如果只是依赖了某个dll的少量接口(几个),可以在自身dll中实现这些接口,不再依赖其他dll。这种方法可以大幅减少加载dll时的内存开销,但这种场景比较少。

三、 总结:

从工作量与效果考虑,建议先处理头文件中的静态全局变量,再删除无用头文件,然后是删除无用dll、冗余代码,最后是处理源文件中的静态全局变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值