C# System.Diagnostics.Stopwatch的用法 - 精确测量代码执行时间
技术百科
星降
发布时间:2026-01-27
浏览: 次 Stopwatch是C#中精确测量代码执行时间的首选工具,基于高性能计数器提供微秒级精度。1. 通过Start()和Stop()控制计时,ElapsedMilliseconds获取毫秒耗时;2. Elapsed属性支持TotalSeconds、TotalMilliseconds等多单位输出;3. 静态StartNew()方法简化实例创建与启动;4. 支持Reset()重置和Restart()重启(.NET 4.5+);5. 依赖系统高精度计时源,频率由Stopwatch.Frequency返回,确保精准测量。正确使用可有效评估性能。
在C#中,System.Diagnostics.Stopwatch 是用于精确测量代码执行时间的常用工具。相比使用 DateTime.Now 或 Environment.TickCount,Stopwatch 提供了更高的精度和更简单的操作接口,特别适合性能测试、算法对比或调试耗时操作。
1. 基本用法
Stopwatch 的使用非常简单。只需创建实例,调用 Start() 开始计时,执行目标代码后调用 Stop() 停止计时,然后通过 Elapsed 属性获取经过的时间。
var stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start();
// 要测量的代码
for (int i = 0; i < 100000; i++)
{
Math.Sqrt(i);
}
stopwatch.Stop();
Console.WriteLine($"执行耗时: {stopwatch.ElapsedMilliseconds} 毫秒");
2. 获取不同单位的时间
Elapsed 属性返回 TimeSpan 类型,可以提取多种时间单位:
- ElapsedMilliseconds:以毫秒为单位的总耗时(long)
- ElapsedTicks:计时器刻度数(高精度)
- Elapsed.TotalSeconds:以秒为单位的总耗时(double,包含小数)
- Elapsed.TotalMilliseconds:包含小数部分的毫秒数
例如:
Console.WriteLine($"总秒数: {stopwatch.Elapsed.TotalSeconds:F6}");
Console.WriteLine($"总毫秒: {stopwatch.Elapsed.TotalMilliseconds:F3}");
3. 静态方法简化调用
可以使用 Stopwatch 的静态方法 StartNew() 直接创建并启动计时器,更加简洁:
var sw = Stopwatch.StartNew();
// 执行代码...
sw.Stop();
Console.WriteLine($"耗时: {sw.ElapsedMilliseconds} ms");
4. 重复使用与重置
Stopwatch 实例可以重复使用。调用 Reset() 可将已用时间清零,Restart() 则会停止并重新开始计时。
sw.Reset(); // 清零 sw.Start(); // 再次开始 // 或者直接重启 sw.Restart();
注意:.NET Framework 4.5+ 才支持 Restart() 方法。
5. 高精度原理说明
Stopwatch 底层依赖于系统高性能计数器(如 Windows 的 QueryPerformanceCounter),其精度远高于普通时间函数。可通过静态属性 Stopwatch.IsHighResolution 确认是否使用高精度计时源。
频率信息可通过 Stopwatch.Frequency 获取,通常为每秒几百万个刻度,确保微秒级甚至更高精度测量。
基本上就这些。Stopwatch 使用简单,精度高,是C#中测量执行时间的首选方式。只要记得及时 Start 和 Stop,避免空跑或重复计时,就能准确评估代码性能。不复杂但容易忽略细节。
# 就能
# 更高
# windows
# 重启
# 可通过
# 只需
# 计时器
# 工具
# win
# double
# c#
# 接口
# .net
# 算法
# 重复使用
# 高性能
# 清零
# 性能测试
# 执行时间
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- c# F# 的 MailboxProcessor
- php8.4如何调用com组件_php8.4win
- Windows音频驱动无声音原因解析_声卡驱动错误
- Windows 10自带杀毒软件在哪_Window
- 如何解决同一段404代码在不同主机上表现不一致的问
- Python装饰器复用技巧_通用能力解析【教程】
- mac怎么分屏_MAC双屏显示与分屏操作技巧【指南
- 如何用正则表达式精确匹配最多含一个换行符的起止片段
- 静态属性修改会影响所有实例吗_php作用域操作符下
- Win11怎么清理C盘系统日志_Win11清理系统
- LINUX如何开放防火墙端口_Linux fire
- Win11如何连接Xbox手柄 Win11蓝牙连接
- Win11键盘快捷键大全_Windows 11常用
- PHP主流架构怎么处理表单验证_规则与自定义【技巧
- c++中如何使用auto关键字_c++11类型推导
- php修改数据怎么批量改状态_批量更新status
- Win11怎么关闭用户账户控制UAC_Window
- php怎么下载安装并配置环境变量_命令行调用PHP
- Win10系统怎么查看端口状态_Windows10
- Go语言中slice追加操作的底层共享机制解析
- Win11怎么清理C盘虚拟内存_Win11清理虚拟
- php下载安装后swoole扩展怎么安装_异步框架
- Windows10怎样设置家长控制_Windows
- Windows10电脑怎么查看硬盘通电时间_Win
- Win11右键反应慢怎么办 Win11优化右键菜单
- Win10路由器怎么隐藏ssid Win10隐藏w
- TestNG的testng.xml配置文件怎么写
- Windows10系统怎么查看CPU温度_Win1
- Linux怎么查找死循环进程_Linux系统负载分
- Windows10怎么卸载预装软件_Windows
- Python音视频处理高级项目教程_FFmpegP
- 如何在包含多值的列中精准搜索指定演员?
- 如何使用Golang捕获并记录协程panic_保证
- php删除数据怎么清空表_truncate与del
- Golang如何避免指针逃逸_Golang逃逸分析
- Win11怎么把图标拖到任务栏_Win11固定应用
- Mac如何修改Hosts文件?(本地开发与屏蔽网站
- Drupal 中渲染节点时出现 HTML 标签嵌套
- 电脑的“网络和共享中心”去哪了_Windows 1
- Win11如何设置环境变量 Win11添加和修改系
- 如何正确访问 Laravel 模型或对象的属性而非
- 如何在Golang中捕获HTTP服务器错误_Gol
- windows 10应用商店区域怎么改_windo
- PHP主流架构如何处理会话管理_Session与C
- Win11色盲模式怎么开_Win11屏幕颜色滤镜设
- Win10怎样卸载DockerDesktop_Wi
- Windows10如何更改桌面背景_Win10个性
- Windows家庭版如何开启组策略(gpedit.
- Win11鼠标灵敏度怎么调 Win11鼠标指针移动
- Windows7怎么找回经典开始菜单_Window


QQ客服