#execution-time #measuring #nanosecond #expression #measurement #precision #measure

tempus_fugit

一个用于以纳秒级精度测量 Rust 表达式执行时间的微型库

16 个版本 (9 个重大更新)

0.11.0 2020年7月8日
0.9.0 2020年3月27日
0.8.2 2019年11月18日
0.5.0 2018年9月14日
0.3.1 2018年3月7日

#162 in 性能分析

每月49次下载

MIT/Apache

15KB
268 代码行

Tempus Fugit   最新版本 Rustc 版本 1.26+

这是一个围绕测量执行某些操作所需时间的概念运行的 Rust crate。

方便是这里的游戏名称,特别是通过赋予依赖的 crate 执行以下两个操作

  1. 以纳秒[1]分辨率测量任何表达式的wall-clock时间

    [dependencies]
    tempus_fugit = "0.10"
    
    #[macro_use] extern crate tempus_fugit;
    
    use std::fs::File;
    use std::io::Read;
    use tempus_fugit::Measurement;
    
    fn main() {
        let (contents, measurement) = measure! {{
            let mut file = File::open("Cargo.lock")
                .expect("failed to open Cargo.lock");
            let mut contents = vec![];
            file.read_to_end(&mut contents)
                .expect("failed to read Cargo.lock");
            String::from_utf8(contents)
                .expect("failed to extract contents to String")
        }};
    
        println!("contents: {:?}", contents);
        println!("opening and reading file took {}", measurement);
    }
    

    measure! 宏返回一个包含执行表达式(在这种情况下是一个块)的结果的元组,以及一个 Measurement,表示表达式执行所需的时间。

  2. 以人类可读的方式显示 Measurement。对于 Measurement 有一个 Display 实现,所以这就像使用例如 format!("{}", measurement) 格式化值一样简单。

Measurement 类型还具有 OrdEq 的 impl,这使得比较和排序变得容易。

此外,还有通过 Serde 的可选支持进行反序列化。这可以通过在 crate 的 Cargo.toml 中使用以下内容激活

[dependencies]
tempus_fugit = { version = "0.10", features = ["enable_serde"] }

[1] 虽然会计是以纳秒分辨率进行的,但实际上分辨率可能由操作系统限制到更粗的粒度。

文档

API 文档位于 此处

依赖关系

~1–2MB
~32K SLoC