#计时器 #作用域 #调试 #性能

scope_timer

一个极其易用的计时器,用于测量执行范围时间

4 个版本

0.2.3 2021 年 12 月 3 日
0.2.2 2021 年 12 月 3 日
0.1.1 2021 年 11 月 30 日

#226性能分析

MIT/Apache

10KB
122

scope_timer 使用方法

scope_timer crate 提供了一种非常简单的方法来创建计时器并跟踪信息。

示例

    fn fib(n: u64) -> u64 {
        if n <= 1 {
            return 1;
        }
        
        fib(n - 1) + fib(n - 2)
    }
    
    fn main() {
        let _handle = ScopeTimer::new("my_timer", TimeFormat::SecondsF32(3), None, false);
        println!("{}", fib(46));
    }
Output:
Label: my_timer | Time: 5.973secs

你也可以这样做

    let mut handle = ScopeTimer::default();
    handle.name = "my_timer";
    handle.log_level = Some(LogLevel::Info);

或者这样做

    let mut handle = scope_timer::ScopeTimer {
        label: "timer",
        time_format: TimeFormat::SecondsF32(3),
        now: std::time::Instant::now(),
        log_level: None,
        debug_only: true,
    };

    handle.label = "what"

日志级别

scope_timer crate 的依赖性最小。你可以为你的项目使用 log crate。

为此,你需要指定日志级别并使用 log 日志实现 作为示例 env_logger crate

    env_logger::init();

    let mut handle = ScopeTimer::default();
    handle.name = "my_timer";
    handle.log_level = Some(LogLevel::Info);

已知问题

你不能创建更优雅的计时器,因为会发生移动,这会自动发生销毁,你会在移动时和移动后打印两次计时器。

像这样

    let _handle = ScopeTimer {
        name: "my_timer",
        ..Default::default()
    };

但是欢迎提出 PR。我会尝试解决这个问题,使计时器更易于使用。

依赖性

~87KB