C++ 性能邪术(如果使用map 提高你的C++ 程序的性能)

这是一篇邪术的文章。 不要跟我说安全的问题。C++ 就是一种在安全边缘,疯狂压榨性能的一种语言。

情景

在公司的某一天,突然接手了一个任务,因为公司的某个产品提出了一个**(嗯你懂的)需求,需要导入大量的Json的数据,然后解析Json 数据,拼接成map 进入到缓存池中。

问题

我写了第一个版本,用 C++ Json 库去解析Json 然后解析成一个多维度的map(就是map),然后根据这个map 去合并(Merge)到缓存中的大map中。开心的敲了2天,出来了。
测试第一版本
30W的条数。进入到系统 总共消耗了,1分30秒。
好了,那个产品灰常灰常 不满意。改!!!

改进

我发现代码中 使用了大量的map 插入 和 map的取值。对于每个map,如果都拿出来,然后赋值给一个对象。那么就是消耗了一次拷贝构造。然后你拿着拷贝构造出来的对象,去进行操作,插入回去又是一种消耗。 可是我的对象类型又不一定一样,这个时候:

用地址

当map插入完成后,人后这个map操作是替换为主,那么 你就使用这个邪术好了,
直接将插入后的map中的地址拿出来使用,当然这样灰常不安全。如果这个时候有另外个线程动了你的map,大概率 随机crash。

好处

这样的好处就是, 可以避免大量的拷贝构造,赋值构造,等等等。还可以让函数变的简单 易懂,因为你可以用void 指针扔进去。

例子(后面的文章补)

结果

这个结果导致,1分半 变成了 10s. 当然还有很多技巧能使 C++ 速度变快。
有兴趣 可以往下看。

发布了5 篇原创文章 · 获赞 1 · 访问量 1705
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章