秒表计时器

/// <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()}");

}

}

相关推荐
skywalk816322 分钟前
windows10 explorer占用太多内存问题解决
服务器·内存·windows10·explorer
张小姐的猫23 分钟前
【Linux】网络编程 —— 多路转接:epoll
linux·运维·网络
宋明河40 分钟前
五种 IO 模型与 select、poll、epoll 对比
linux
玄芯散人1 小时前
【金丹·81】性能分析:你的程序慢在哪
linux·性能优化·perf
天意__1 小时前
Linux部署Qwen轻量模型
linux·服务器·qwen
对空六课1 小时前
无头浏览器访问对跳出率的过滤规则
服务器·前端·算法·数据分析
木卫二号Coding1 小时前
第八十六篇-Strata 部署指南(Ubuntu 22.04 + Tesla V100【单卡】)
linux·运维·人工智能·ubuntu
11路没有终点1 小时前
sed 命令详解:文本编辑流处理实战
linux
瑶山1 小时前
Windows + WSL2 Ubuntu + VS Code配置C++开发环境
开发语言·c++·windows·vscode·wsl
开开心心就好2 小时前
一元二次方程求解工具,答案带详细步骤
java·服务器·开发语言·算法·pdf·ocr·perl