秒表计时器

/// <summary>

/// 秒表计时器

/// </summary>

public class StopWatch

{

/// <summary>

/// 一个步骤

/// </summary>

class StepClass

{

public string stepname;

public DateTime start;

public DateTime end;

}

private string _name;

private DateTime _start;

private DateTime _stepstart;

private double _skipMS;

private List<StepClass> _steps;

public StopWatch() : this("未命名") { }

public StopWatch(string name)

{

_name = name;

_start = DateTime.Now;

_stepstart = _start;

_steps = new List<StepClass>();

_skipMS = 0;

}

/// <summary>

/// 记一个步骤

/// </summary>

/// <param name="name"></param>

public void Step(string name)

{

_steps.Add(new StepClass()

{

stepname = name,

start = _stepstart,

end = DateTime.Now

});

_stepstart = DateTime.Now;

}

/// <summary>

/// 跳过这段时间

/// </summary>

/// <param name="skipTotalTime"></param>

public void Skip(bool skipTotalTime = false)

{

if (skipTotalTime) _skipMS += DateTime.Now.Subtract(_stepstart).TotalMilliseconds;

_stepstart = DateTime.Now;

}

/// <summary>

/// 到现在为止的用时

/// </summary>

public double TotalMS

{

get { return DateTime.Now.Subtract(_start).TotalMilliseconds - _skipMS; }

}

/// <summary>

/// 计时信息

/// </summary>

/// <returns></returns>

public override string ToString()

{

StringBuilder sb = new StringBuilder();

sb.AppendLine($"计时器:{_name},总用时= {TotalMS:0.0} 毫秒,开始时间={_start:HH:mm:ss.fff},步骤数={_steps.Count}");

for(int i= 0; i<_steps.Count;i++)

{

sb.AppendLine($" {i:00} 用时= {_steps[i].end.Subtract(_steps[i].start).TotalMilliseconds,6:0.0} 毫秒\t{_steps[i].stepname}\t开始时间={_steps[i].start:HH:mm:ss.fff}");

}

return sb.ToString();

}

/// <summary>

/// 记录到日志

/// </summary>

public void ToLog()

{

Log.info($"{ToString()}");

}

}

相关推荐
cuisidong199730 分钟前
如何在 Kali Linux 上安装 Google Chrome 浏览器
linux·运维·chrome
凌云行者37 分钟前
使用rust写一个Web服务器——单线程版本
服务器·前端·rust
光通信学徒1 小时前
ubuntu图形界面右上角网络图标找回解决办法
linux·服务器·ubuntu·信息与通信·模块测试
wusam1 小时前
螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习03(网络及IP规划)
运维·服务器·网络·docker·容器
你会发光哎u1 小时前
Webpack模式-Resolve-本地服务器
服务器·前端·webpack
南种北李1 小时前
Linux自动化构建工具Make/Makefile
linux·运维·自动化
小飞猪Jay1 小时前
面试速通宝典——10
linux·服务器·c++·面试
暗恋 懒羊羊2 小时前
Linux 生产者消费者模型
linux·开发语言·ubuntu
梓䈑3 小时前
【C语言】自定义类型:结构体
c语言·开发语言·windows
安红豆.3 小时前
Linux基础入门 --13 DAY(SHELL脚本编程基础)
linux·运维·操作系统