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

  • 相关阅读:
    解决winfrom下TextBox不支持透明背景色
    C# Winform 怎么让按钮在Panel里居中显示
    DevExpress Cpicturebox或者Dev控件 PictureEdit 按比例的缩放加载图片
    Alluxio : 开源分布式内存文件系统
    yarn cluster和yarn client模式区别——yarn-cluster适用于生产环境,结果存HDFS;而yarn-client适用于交互和调试,也就是希望快速地看到application的输出
    Linux 反弹shell(二)反弹shell的本质
    浅谈摄像头有关的安全问题
    pyspark AttributeError: 'NoneType' object has no attribute 'setCallSite'
    大规模异常滥用检测:基于局部敏感哈希算法——来自Uber Engineering的实践
    pyspark minHash LSH 查找相似度
  • 原文地址:https://www.cnblogs.com/bdstjk/p/2519862.html
Copyright © 2011-2022 走看看