漫漫开发路PCH:提升大型工程编译速度的利器
对于大型工程 , PCH的确是个好东西
一直以来 , 预编译PCH文件都被证明是一个提升编译速度的好方法 。 通过PCH , 可以在编译开始时仅包含头文件一次 , 这样避免了对某些经常会使用到的头文件的重复扫描 , 从而大大提升了编译速度 , 减少了整个工程的编译时间 。
从传统的角度来说 , 将一个头文件选择作为预编译头文件有点像是一个猜谜语的游戏 , 你会觉得有些头文件应该被预编译 , 而有些在你看来不需要 , 并且 , 每个人对相同的头文件是否应该被预编译都有自己的看法 。
在今天的文章中 , 我们将演示如何通过vcperf分析工具和C++BuildInsightsSDK来找到那些需要被预编译的头文件 。 同时 , 我们还会以开源项目lrrlicht作为一个例子 , 通过对头文件进行有效的预编译 , 我们编译这个项目的速度有了40%的提升 。
如何获取和使用vcperf
在今天的例子中 , 我们使用到了vcperf 。 这是一个用来捕获编译信息的工具 , 并且可以在WindowsPerformanceAnalyzer(WPA)中查看这个编译信息 。 它的最新版本已经包含在了VisualStudio2019Preview版本中 。
1.下面是获取和配置vcperf和WPA的步骤:
1.1下载并安装最新版本的VisualStudio2019Preview 。
1.2下载并安装最新版本的WindowsADK , 里面包含有WPA 。
1.3将VisualStudio2019Preview的MSVC安装目录中的perf_msvcbuildinsights.dll拷贝至WPA目录 。 这个文件是C++BuildInsightsWPA的插件 , 它必须对WPA可见 , 才能正确的显示C++BuildInsights事件 。
a.MSVC的安装目录通常是:C:ProgramFiles(x86)MicrosoftVisualStudio2019PreviewVCToolsMSVC{Version}binHostx64x64
b.WPA的安装目录通常是:C:ProgramFiles(x86)WindowsKits10WindowsPerformanceToolkit1.4在WPA安装目录下打开perfcore.ini文件 , 添加一个perf_msvcbuildinsights.dll文件对应的条目 。 通过这个条目 , 我们可以告诉WPA在其启动时加载C++BuildInsights插件 。
2.下面是收集工程编译信息的步骤:
2.1已管理员权限打开x64NativeToolsCommandPromptforVS2019Preview 。
2.2根据以下步骤获取工程编译信息:
a.执行指令:[vcperf/start/level3MySessionName] 。 /level3选项可以启用模板事件的收集 。
b.在系统的任意地方编译你的工程 , 甚至可以在VisualStudio中进行编译 , 因为vcperf会在整个系统范围收集事件信息 。
c.执行指令:[vcperf/stop/templatesMySessionNameoutputFile.etl] 。 这条指令将会停止信息收集 , 并分析所有事件 , 包括模板事件 , 然后将分析后的结果保存到outputFile.etl文件中 。
3.在WPA中打开刚刚收集好的编译信息文件 。
在WPA中查看头文件扫描信息
C++BuildInsights提供了一个称之为Files的WPA视图 , 通过这个视图 , 我们可以清楚地看到编译器对整个工程中所有头文件扫描的时间 。
在WPA中打开编译信息文件后 , 你可以在GraphExplorer窗格中拖动这个视图到Analysis窗口 , 如下图所示:
文章图片
在这个视图中 , 最为重要的是InclusiveDuration和Count这两列 , 他们显示了对应的头文件的总体扫描时间和这个头文件被包含的次数 。
案例研究:使用vcperf和WPA来为Irrlicht3D引擎创建一个PCH
在这个案例中 , 我们将演示如何使用vcperf和WPA来为Irrlicht这个开源项目创建一个PCH , 并提升40%的编译速度 。
具体的操作步骤如下:
1.克隆Irrlicht工程仓库 。
2.Checkout这个提交版本:97472da9c22ae4a 。
3.以管理员身份打开x64NativeToolsCommandPromptforVS2019Preview并导航到Irrlicht工程的根目录 。
4.执行指令:devenv/upgrade.sourceIrrlichtIrrlicht15.0.sln 。 这条指令将会升级工程的解决方案文件升级到最新版本的MSVC 。
推荐阅读
- 漫漫笑我回个我也爱你,难道我做错了吗,幽默笑话:刚才你说爱我
- 漫漫笑我们通常能挣到更多的钱,幽默笑话:让客户先自己修理打印机的话
- 漫漫笑我是你的粉丝,你可以关注我吗,幽默笑话:佛祖
- 漫漫笑已经很久没人给我打电话了,幽默笑话:不行!至少十分钟
- 漫漫笑然后他们两人都罚款500,幽默笑话:领导一看照片是用手机拍的
- 漫漫笑哎,对了您是谁家长,幽默笑话:你儿子考的很好!在班里表现不错
- 漫漫笑不傻也看不上我闺女,幽默笑话:还是你阿姨说的对
- 漫漫笑可是我不想去见鬼嘛,幽默笑话:爸爸心烦说让我见鬼去
- 漫漫笑和我妈揍我P股的声音一样响,幽默笑话:奶奶你拍蚊子的声音
- 漫漫笑鱼是主人给的工资,我不工作哪来的工资,幽默笑话:抓你是我工作