zoukankan      html  css  js  c++  java
  • 自定义一个代码耗时计数工具类

    当需要知道某段代码到底耗时多少时,使用最最频繁的场景,就是计时开始,计时结束得到耗时时间(通常以毫秒为单位,再转换成秒也是特别容易)。

    通常情况下,会使用一个变量记录开始时间,结束时再进行时间运算显示结果,但代码有点多,且时间加减本就不容易(哈哈)。而使用其它工具,得找(哈哈),而且它可能给你个并不好关联的名字。

    那就来自定义一个耗时计数器吧,它有个开始,有个结束,结束时返回耗时计数。关键,这里用一个自己一碰到耗时计数就能想起的名字。

    开始定义

    于时,有了以下类定义:

    /// <summary>
    /// 耗时计数器
    /// </summary>
    public class TimeConsumingCounter
    {
        // 创建时默认为创建时间,这样不调用 Start 也可以
        private DateTime _StartTime = DateTime.Now;
    
        // 计时开始
        public void Start()
        {
            _StartTime = DateTime.Now;
        }
    
        // 计时结束(输出毫秒)
        public long Over()
        {
            var timespan = DateTime.Now - _StartTime;
            return Convert.ToInt32(timespan.TotalMilliseconds);
        } 
    }
    

    来来来,看一下使用方法:

    TimeConsumingCounter tcc = new TimeConsumingCounter();
    tcc.Start();
    for (var i = 0; i < 10000000; i++)
    {
    }
    // 输出耗时计数
    Debug.Write(tcc.Over());
    

    稍作扩展

    也许毫秒并不能满足我的需要,不想再进行秒分的转换。那就再来个 TimeSpan 的返回吧,它自带转换。

    // 取得间隔
    public TimeSpan Span()
    {
        return DateTime.Now - _StartTime;
    }
    

    于是输出可以是: Debug.Write(tcc.Span().TotalMinutes);

    其实,还想更直接点,直接告诉我那个过程运行有多少时间吧。

    先看看,最终使用的两个示例:
    1.示例一

    Debug.Write(
        TimeConsumingCounter.TimeConsuming(() =>
        {
            for (var i = 0; i < 10000000; i++)
            {
            }
        }).TotalMilliseconds
    );
    

    2.示例二

    private void Foo()
    {
        for (var i = 0; i < 10000000; i++)
        {
        }
    }
    
    // 输出 Foo 运行耗时
    Debug.Write(
        TimeConsumingCounter.TimeConsuming(Foo).TotalMilliseconds
    );
    

    原理其实很简单,为工具类增加一个静态方法,把需要耗时统计的代码以参数的形式传递给它去计时就可以了。这个方法中,使用到了 Action,是 C# 的一种委托,可先熟悉下。静态方法如下:

    /// <summary>
    /// 静态方法,运行指定函数,返回耗时结果
    /// </summary>
    /// <param name="action"></param>
    /// <returns></returns>
    public static TimeSpan TimeConsuming(Action action)
    {
        TimeConsumingCounter tcc = new TimeConsumingCounter();
        action();
        return tcc.Span();
    }
    

    附完整代码

    /// <summary>
    /// 耗时计数器
    /// </summary>
    public class TimeConsumingCounter
    {
        // 创建时默认为创建时间,这样不调用 Start 也可以
        private DateTime _StartTime = DateTime.Now;
    
        // 计时开始
        public void Start()
        {
            _StartTime = DateTime.Now;
        }
    
        // 计时结束(输出毫秒)
        public long Over()
        {
            var timespan = DateTime.Now - _StartTime;
            return Convert.ToInt32(timespan.TotalMilliseconds);
        }
    
        // 取得间隔
        public TimeSpan Span()
        {
            return DateTime.Now - _StartTime;
        }
    
        /// <summary>
        /// 静态方法,运行指定函数,返回耗时结果
        /// </summary>
        /// <param name="action"></param>
        /// <returns></returns>
        public static TimeSpan TimeConsuming(Action action)
        {
            TimeConsumingCounter tcc = new TimeConsumingCounter();
            action();
            return tcc.Span();
        }
    }
    
  • 相关阅读:
    Android Studio快速导入项目
    梦断代码阅读笔记01
    Python词云生成
    Python 数据处理
    Android studio 自定义Dialog
    Android studio Activity的跳转和数据传递
    Android studio Handler消息处理2
    2.9 react组件中使用key作为prop属性命名报错
    2.3 上下margin值合并
    2.2 快速认识虚拟dom
  • 原文地址:https://www.cnblogs.com/timeddd/p/10948831.html
Copyright © 2011-2022 走看看