zoukankan      html  css  js  c++  java
  • 如何分析程序的时间消耗

    总结一些常用的方法,思考如何分析一个程序的时间消耗。

     
    1.  Trace Log 

    这个是大家最常用,也是最简单和有效地方法。通常是在函数的开始和结束的位置加入Log, 最后通过Log记录时间统计函数的时间消耗。
    有时嫌2次log太麻烦,我们可以通过RAII进行封装:
    class CTimeCostDebug
    {
    public:
     CTimeCostDebug(LPCTSTR lpszFunName);
     ~CTimeCostDebug()
    };
    我们在构造函数里记录开始时间,在析构函数里记录结束时间以及打印时间消耗。
     
    只要这样用就好了:
    int main()
    {
        {
            CTimeCostDebug t(_T("test_fun"));
            test_fun();
        }


        return 0;
    }
    这里时间记录函数推荐用高精度的QueryPerformanceCounter (曾经尝试用GetTickCount,结果发现误差超过10ms).
     
    2. WinDbg的!runaway命令

    该命令可以打印每个线程的时间消耗:包括用户模式执行时间,内核模式执行时间以及线程创建到现在的总时间。
    通过该命令我们可以分析出哪些线程在空转消耗时间,然后进行优化
     


    3. WinDbg 的 wt 命令

    该命令可以帮我们分析目标函数及其子程序执行的指令数,然后帮我们分析该函数的性能消耗分布。
    比如我们分析ShowWindow API 的指令消耗, 我们可以看到内部子函数的调用及开销:
     
     


    4. VS  profiler

    VS  2010之后自带性能分析工具Profiler, 该工具可以帮我们对程序运行的性能进行分析。

     


    5.  Intel VTune

    我用的是  Intel VTune Amplifier XE 2011, 这个工具非常专业,可以在VS2008里使用,帮我们分析程序的热点开销和关键调用。
     
     
     




    总之,根据二八定律,程序运行过程中20%的代码消耗了80%的时间, 关键的问题是找出这20%代码,然后进行优化。不知道大家还有没有其他好的性能分析方法?
     
    还可以用xperf 

    http://www.cppblog.com/weiym/archive/2014/09/16/208335.html

  • 相关阅读:
    如何解决chrome和chromedriver版本不匹配
    RobotFramework 实战1——数据检查自动化
    RobotFramework 中的循环语句:FOR IN RANGE
    robotframework 获取昨日(get time关键词的用法)
    大数据用户画像方法与实践(干货 转帖)
    Scrapy实战篇(九)之爬取链家网天津租房数据
    Scrapy实战篇(八)之爬取教育部高校名单抓取和分析
    Scrapy实战篇(七)之爬取爱基金网站基金业绩数据
    Selenium常用方法
    Selenium之动作链(ActionChains)
  • 原文地址:https://www.cnblogs.com/findumars/p/5794162.html
Copyright © 2011-2022 走看看