秒表计时器

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

}

}

相关推荐
赖small强12 小时前
【Linux C/C++开发】Linux C/C++ 高效延迟崩溃分析:基于 mprotect 的内存陷阱技术 (Electric Fence)
linux·c语言·c++·mprotect·buffer overflow
保持低旋律节奏12 小时前
linux——make/Makefile自动化工程构建
linux·运维·自动化
云计算练习生12 小时前
渗透测试行业术语—— 网络攻击方式与漏洞利用
服务器·网络·安全·渗透测试术语·网络安全术语
繁华似锦respect12 小时前
C++ & Linux 中 GDB 调试与内存泄漏检测详解
linux·c语言·开发语言·c++·windows·算法
爱潜水的小L12 小时前
自学嵌入式day25,树
linux
周杰伦_Jay12 小时前
【Linux Shell】命令完全指南
linux·运维·服务器
锡兰_CC12 小时前
无缝触达,卓越体验:开启openEuler世界的任意门
服务器·网络·数据库·c++·图像处理·qt·nginx
qq_4798754312 小时前
protobuf[2]
linux
sky北城12 小时前
Linux的回收站机制实现方式总结
linux·运维·服务器
代码游侠13 小时前
复习——栈、队列、树、哈希表
linux·数据结构·学习·算法