StupidBeauty
Read times:927Posted at:Tue Jul 4 04:09:54 2023 - no title specified

一个 C++/QML程序的 性能分析报告:J SON解析占用了15%的执行时间

1 问题

这是个人开发的一个量化分析系统中的客户端,名为 寸短

近期对整个系统进行重构并加入一个新功能之后,性能变得不够实用了。

在对Ruby开发的服务器端做了一些调整之后,目前性能的瓶颈表现在客户端这一块了。

在做了一轮性能监测之后,发现客户端里面主要影响性能的大头。不过比较出乎意料的是,最明显影响到运行速度的是一处JSON解析代码。另一方面,客户端里嵌入了一个遗传算法库 EhxoQt ,用于在回测过程中搜索更合适的投资策略。本以为遗传算法的部分会是最影响性能的部分,实际却不是。

从截图中可以看到,在监测到的最消耗时间的那一组调用栈中,最深层的一处由我们自己写的代码就是:

StockIndividual::calculateTransactionAmount() const: qint32

这个方法中调用了Qt提供的 QJsonDocument::fromJson 方法,时间就消耗在fromJson方法里。它占用了整体 15.3%的时间。

放大来看。

2 处理

在允许的情况下,我们需要避免这里的这个调用,或是寻找替代方案。

具体对于这个问题来说,这里正好是可以避免调用的。

此处这段代码进行JSON解析的目的只是为了计数,将服务器端传回的回测投资方案进行解析,并数出其中的投资交易列表中的条目个数。这段 JSON内容是服务器端生成的,服务器端自然是知道投资交易列表中是有多少个条目的。

因此,在客户端与服务器端的接口里,做一个小的调整。让服务器端在返回回测投资方案列表的同时,直接告知列表中的条目个数即可。这样,客户端就不需要为了这个目的而进行此处的JSON解析了。

3 结果

处理过后,再次做性能监测,结果是这样:

一处JSON序列化代码成了最显著影响运行速度的地方了。

这里展示的问题要另外处理了。

Your opinions
Your name:Email:Website url:Opinion content: