You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Stopwatch没有统计到Thread.Sleep的耗时?

问题原因

你遇到的问题和Stopwatch本身无关,是错误使用了TimeSpan的属性导致的:

  • Stopwatch的Elapsed属性返回的是TimeSpan结构,该结构的Milliseconds属性仅表示时间间隔中不足1秒的毫秒分量,取值范围为0~999,不会包含前面的整秒、整分钟等时间对应的毫秒数。
  • 如果你要获取整个时间间隔换算为毫秒的总数值,应该使用带Total前缀的TotalMilliseconds属性。

你案例中实际记录的时间间隔是00:00:05.003(5秒零3毫秒),此时:

  • Elapsed.Milliseconds返回的是不足1秒的部分:3
  • Elapsed.TotalMilliseconds才会返回总毫秒数:5003

修正代码

只需要修改最后打印耗时的行即可:

open System.Diagnostics
open System.Threading

[<EntryPoint>]
let main _ =
    let timer = Stopwatch ()
    printfn "begin"
    timer.Start ()
    Thread.Sleep 5000
    timer.Stop ()
    printfn "end"
    // 改用TotalMilliseconds获取总毫秒数
    printfn "%.0f ms" timer.Elapsed.TotalMilliseconds
    0

内容的提问来源于stack exchange,提问作者CarbonFlambe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:24:03