秒表计时器

/// <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} 用时= {_stepsi.end.Subtract(_stepsi.start).TotalMilliseconds,6:0.0} 毫秒\t{_stepsi.stepname}\t开始时间={_stepsi.start:HH:mm:ss.fff}");

}

return sb.ToString();

}

/// <summary>

/// 记录到日志

/// </summary>

public void ToLog()

{

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

}

}

相关推荐
玖石书35 分钟前
WSL2 手动安装 Ubuntu 24.04 到指定磁盘位置
linux·运维·ubuntu·wsl
库玛西1 小时前
深入浅出传输层:UDP 与 TCP 协议全景指南
linux·服务器·网络·c++·笔记·tcp/ip·udp
随便做点啥1 小时前
32卡-64G-910B4-16后端-(Qwen3.8-27B-W8A8)集群部署报告
运维·服务器·经验分享·docker·vllm
薛定谔的悦5 小时前
储能 EMS 的功率策略:从一块电表到一次逆流的 200 毫秒
大数据·linux·能源·储能·bms
新时代牛马8 小时前
Linux 内核入门地图:架构、源码目录与五大子系统
linux·运维·架构
Julien20048 小时前
控制 SELinux 文件上下文
linux·运维·服务器
sulikey9 小时前
Linux Core Dump 完全指南:从原理到实战的崩溃调试手册。什么是core dump?程序报错core dumped怎么办?
linux·服务器·操作系统·调试·coredump
Lifangyun_WD9 小时前
第一次租 GPU 服务器怎么开始?镜像、SSH、数据存储和停机前要做什么
服务器·云计算·gpu算力·gpu算力租赁
YCOSA20259 小时前
雨晨 Windows 11 IoT 企业版 LTSC 26H2 轻装 26300.9278 自用版
windows·物联网
DevLoom_10 小时前
SD卡插电脑提示:驱动器中的磁盘未被格式化?恢复数据正确处理步骤
运维·服务器·电脑