分享一个性能问题的解决:setlocale导致的性能问题

问题描述

做的一个功能:

从access的mdb数据库文件里提取数据,然后生成模型进行布置。c++实现。

但不知道为什么,每布置一次,都要至少4秒的时间。

心想mdb的性能不会这么差吧,去网上差,好像也鲜有人提到mdb性能很差。

那看来就是自己的问题了。

但浏览代码,把可能的影响效率的地方都做了优化,操作效率上确实有所提升,但并没有质的飞跃。百思不得其解,几欲放弃。

反复进行分析,最后通过下面的方法定位到了setlocale函数,项目里的一个底层函数用到了它,这个函数主要用来将string和wstring互转。

具体排查过程

需要优化的操作的逻辑,通过提前return,发现减少的时间很“均匀“:执行的代码多,时间耗时就多,执行的少,耗时就少。看起来很”合理“。

通过对每一部分逻辑加入循环,从而放大耗时的逻辑。像下面这样

比如整个逻辑由4个fun函数来完成:

void  fun()

{

    fun1();

    fun2();

    fun3();

    fun4();

}

对每一个段进行排查,对可能的耗时逻辑段进行放大:

void  fun()

{

    for(int i=0; i<1000; +i)

    {

        fun1();

    }

    fun2();

    fun3();

    fun4();

}

结果终于发现在执行string和wstring互转函数的时候,耗时异常的大。里面有个setlocal函数,就是罪魁祸首。最后不用这种方式,问题解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值