自定义一个代码耗时计数工具类
程序员文章站
2022-03-20 09:38:56
当需要知道某段代码到底耗时多少时,使用最最频繁的场景,就是计时开始,计时结束得到耗时时间(通常以毫秒为单位,再转换成秒也是特别容易)。 通常情况下,会使用一个变量记录开始时间,结束时再进行时间运算显示结果,但代码有点多,且时间加减本就不容易(哈哈)。而使用其它工具,得找(哈哈),而且它可能给你个并不 ......
当需要知道某段代码到底耗时多少时,使用最最频繁的场景,就是计时开始,计时结束得到耗时时间(通常以毫秒为单位,再转换成秒也是特别容易)。
通常情况下,会使用一个变量记录开始时间,结束时再进行时间运算显示结果,但代码有点多,且时间加减本就不容易(哈哈)。而使用其它工具,得找(哈哈),而且它可能给你个并不好关联的名字。
那就来自定义一个耗时计数器吧,它有个开始,有个结束,结束时返回耗时计数。关键,这里用一个自己一碰到耗时计数就能想起的名字。
开始定义
于时,有了以下类定义:
/// <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(); } }
推荐阅读
-
一个自定义位数的php多用户计数器代码
-
一个自定义位数的php多用户计数器代码
-
自定义一个代码耗时计数工具类
-
Java JDBC自定义封装工具类的步骤和完整代码
-
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容_javascript技巧
-
性能分析:针对代码片段执行消耗CPU时间估算的方式2:自定义计时和日志记录工具类
-
一个自定义位数的php多用户计数器代码_PHP教程
-
网络请求 当我们遇到调用很多次为了减少代码量和内存的占用 我们可以写一个工具类 每次需要我们可以直接调用 单例模式
-
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容_javascript技巧
-
一个自定义位数的php多用户计数器代码