为什么Stopwatch没有统计到Thread.Sleep的耗时?
问题原因
你遇到的问题和Stopwatch本身无关,是错误使用了TimeSpan的属性导致的:
Stopwatch的Elapsed属性返回的是TimeSpan结构,该结构的Milliseconds属性仅表示时间间隔中不足1秒的毫秒分量,取值范围为0~999,不会包含前面的整秒、整分钟等时间对应的毫秒数。- 如果你要获取整个时间间隔换算为毫秒的总数值,应该使用带
Total前缀的TotalMilliseconds属性。
你案例中实际记录的时间间隔是00:00:05.003(5秒零3毫秒),此时:
Elapsed.Milliseconds返回的是不足1秒的部分:3Elapsed.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
相关产品推荐
相关产品推荐

