用途与问题
日志上的开始与结束时间便于定位事件,但计算经过时间还有专门的计时需求。应把事件发生在几点与操作持续多久分开记录,避免将显示时区、格式化和计时逻辑混在一起。
原理与实现选择
Stopwatch 提供开始、停止、重启与读取累计经过时间的接口。样本做少量内存运算,检查状态和非负时长,再使用 Restart 清零重启。它只验证接口使用,不给出某台电脑应该达到的速度或固定耗时阈值。
适用环境与验证范围
适用环境为 PowerShell 7。本页由 AI 辅助撰写与整理;完整受控样本已在本机 PowerShell 7.6 执行并通过检查。除文件元数据样本仅操作自行创建并清理的唯一临时文件外,其余样本只操作内存或局部会话;没有连接生产服务器或修改用户配置。已核对所引 PowerShell 与 .NET 官方资料,未在 Windows PowerShell 5.1 或目标生产环境执行,版本差异需另行验证。
可执行样本
在新的 PowerShell 7 测试会话中运行以下完整代码,保留所有检查语句。先阅读样本的文件与会话影响范围,不要在生产会话中直接替换真实输入;同名函数演示结束后退出该测试会话。
$watch = [Diagnostics.Stopwatch]::StartNew()
if (-not $watch.IsRunning) { throw 'Timer not running' }
$value = 0
for ($i=0; $i -lt 1000; $i++) { $value += $i }
$watch.Stop()
if ($watch.IsRunning -or $watch.ElapsedTicks -lt 0) { throw 'Timer state mismatch' }
if ($value -ne 499500) { throw 'Work result mismatch' }
$watch.Restart()
if (-not $watch.IsRunning) { throw 'Restart failed' }
$watch.Stop()
'Timer lifecycle checked; no benchmark conclusion'预期结果与核对
计时器能停止、重启,运算结果正确,经过时间非负。没有比较不同实现的性能,也没有要求测出的毫秒数固定,调度与运行环境都可能影响单次测量。
常见误区
不要用一次微小测试推断吞吐或服务延迟。正式基准需要预热、多次采样、输入规模与环境说明;计时器精度也不等于被测流程的测量准确性。
适用边界
适用于记录受控操作的经过时间。事件时间戳仍需另外记录,性能结论则需要专门设计的基准,而不是从本例直接外推。