zoukankan      html  css  js  c++  java
  • 对老赵写的简单性能计数器的修改

      早上看到老赵写的这个性能计数器,感觉很实用,不过老赵用了很多.C# 3.0 的新语法,还用了 VISTA 和 Server 2008 下特有的Win32 API,对于还在用C#2.0 或者还工作在 XP 或者 Server 2003 下的兄弟们,只能望代码心叹了。应老赵的要求,我修改了他的代码,增加了对低版本C# 和 低版本windows 操作系统的支持。

        老赵的原文: 一个简单的性能计数器:CodeTimer

        修改说明

        1. 采用 接口 取代了原代码中的 Lambda 表达式

        2. 采用 GetThreadTimes 这个API 函数替代了原代码中的 QueryThreadCycleTime

        这里需要说明的是 GetThreadTimes 给出了线程在内核态和用户态占用的时间,单位是 100 ns。两个时间的总和就是线程占用的CPU时间。这个API的时间精度我看了一些资料似乎没有达到 100ns. 所以GetThreadTimes 这个API函数的进度没有 QueryThreadCycleTime 高。

        下面是我修改后的代码

        注释1: 2009-03-11 增加委托的调用,修改 GC.Collect 参数,兼容.Net 2.0.  增加每次调用时间统计 

        增加了委托调用后,我发现同样是测试空函数,采用接口比采用委托效率要略高一些,这和我的预计基本吻合,因为委托不是单纯的函数调用,具体原理超出本文范围,我就不多说了。


     

    测试类


     

    测试代码

    采用接口 


     

    测试结果

    Thread Sleep
            Time Elapsed:           2,997ms
            Time Elapsed (one time):2,997ms
            CPU time:               0ns
            CPU time (one time):    0ns
            Gen 0:                  0
            Gen 1:                  0
            Gen 2:                  0

    Empty Method
            Time Elapsed:           138ms
            Time Elapsed (one time):0ms
            CPU time:               125,000,000ns
            CPU time (one time):    12ns
            Gen 0:                  0
            Gen 1:                  0
            Gen 2:                  0

    String Concat
            Time Elapsed:           10,547ms
            Time Elapsed (one time):0ms
            CPU time:               10,546,875,000ns
            CPU time (one time):    105,468ns
            Gen 0:                  4102
            Gen 1:                  2661
            Gen 2:                  2545

    StringBuilder Conca
            Time Elapsed:           4ms
            Time Elapsed (one time):0ms
            CPU time:               0ns
            CPU time (one time):    0ns
            Gen 0:                  0
            Gen 1:                  0
            Gen 2:                  0

    采用委托


    测试结果

    Thread Sleep
            Time Elapsed:           2,989ms
            Time Elapsed (one time):2,989ms
            CPU time:               0ns
            CPU time (one time):    0ns
            Gen 0:                  0
            Gen 1:                  0
            Gen 2:                  0

    Empty Method
            Time Elapsed:           156ms
            Time Elapsed (one time):0ms
            CPU time:               156,250,000ns
            CPU time (one time):    15ns
            Gen 0:                  0
            Gen 1:                  0
            Gen 2:                  0

    String Concat
            Time Elapsed:           10,425ms
            Time Elapsed (one time):0ms
            CPU time:               10,406,250,000ns
            CPU time (one time):    104,062ns
            Gen 0:                  4102
            Gen 1:                  2661
            Gen 2:                  2545

    StringBuilder Conca
            Time Elapsed:           4ms
            Time Elapsed (one time):0ms
            CPU time:               0ns
            CPU time (one time):    0ns
            Gen 0:                  0
            Gen 1:                  0
            Gen 2:                  0

  • 相关阅读:
    python爬虫系列:三、URLError异常处理
    python系列:二、Urllib库的高级用法
    python系列:一、Urllib库的基本使用
    二十七、mysql如何确保数据不丢失?有几点值得我们借鉴
    二十六、聊聊mysql如何实现分布式锁
    二十五、sql中where条件在数据库中提取与应用浅析
    Idea 使用YapiUpload上传接口到Yapi
    Yapi部署
    centos安装nodejs
    mongo部署(linux)
  • 原文地址:https://www.cnblogs.com/bdstjk/p/2519862.html
Copyright © 2011-2022 走看看