一个 C++/QML程序的 性能分析报告:J SON解析占用了15%的执行时间
这是个人开发的一个量化分析系统中的客户端,名为 寸短 。
近期对整个系统进行重构并加入一个新功能之后,性能变得不够实用了。
在对Ruby开发的服务器端做了一些调整之后,目前性能的瓶颈表现在客户端这一块了。
在做了一轮性能监测之后,发现客户端里面主要影响性能的大头。不过比较出乎意料的是,最明显影响到运行速度的是一处JSON解析代码。另一方面,客户端里嵌入了一个遗传算法库 EhxoQt ,用于在回测过程中搜索更合适的投资策略。本以为遗传算法的部分会是最影响性能的部分,实际却不是。
从截图中可以看到,在监测到的最消耗时间的那一组调用栈中,最深层的一处由我们自己写的代码就是:
StockIndividual::calculateTransactionAmount() const: qint32 。
这个方法中调用了Qt提供的 QJsonDocument::fromJson 方法,时间就消耗在fromJson方法里。它占用了整体 15.3%的时间。
放大来看。
在允许的情况下,我们需要避免这里的这个调用,或是寻找替代方案。
具体对于这个问题来说,这里正好是可以避免调用的。
此处这段代码进行JSON解析的目的只是为了计数,将服务器端传回的回测投资方案进行解析,并数出其中的投资交易列表中的条目个数。这段 JSON内容是服务器端生成的,服务器端自然是知道投资交易列表中是有多少个条目的。
因此,在客户端与服务器端的接口里,做一个小的调整。让服务器端在返回回测投资方案列表的同时,直接告知列表中的条目个数即可。这样,客户端就不需要为了这个目的而进行此处的JSON解析了。
处理过后,再次做性能监测,结果是这样:
一处JSON序列化代码成了最显著影响运行速度的地方了。
这里展示的问题要另外处理了。
HxLauncher: Launch Android applications by voice commands