12 个稳定版本 (3 个主要版本)

4.0.1 2020年12月29日
4.0.0 2020年7月8日
3.0.3 2020年7月8日
3.0.2 2020年6月18日
1.1.2 2019年11月27日

#94 in 性能分析

Download history 48/week @ 2024-03-11 25/week @ 2024-03-18 27/week @ 2024-03-25 62/week @ 2024-04-01 46/week @ 2024-04-08 29/week @ 2024-04-15 40/week @ 2024-04-22 56/week @ 2024-04-29 12/week @ 2024-05-06 17/week @ 2024-05-13 35/week @ 2024-05-20 8/week @ 2024-05-27 16/week @ 2024-06-03 10/week @ 2024-06-10 14/week @ 2024-06-17 15/week @ 2024-06-24

每月下载 56 次
2 crates 中使用

Apache-2.0 协议

22KB
248

Devtimer 构建状态 Crates.io Crates.io Crates.io Crates.io

这是 Rust 的简洁而完整的基准测试套件。就这么简单。

原因

我看到了很多,很多 基准测试工具。然而,没有人意识到我们需要简单性来简化开发并提高生产力。 devtimer 为用 Rust 编写的代码提供了一个非常 简洁 而且完整的基准测试套件。它仅使用标准库来提供基准操作。您可以用来测试单个操作,也可以用来多次运行操作,并找到最小、最大和平均执行时间。由于这个 crate 没有外部依赖,它体积小、速度快,并且确实做到了它所声称的。祝您基准测试愉快!

需要从旧版本迁移的帮助?请参阅 变更日志

用法

将以下内容添加到您的 cargo.toml 文件中

devtimer = "*"

然后在您的源文件中添加以下行(例如 main.rslib.rs 或您需要使用它的地方)

use devtimer::DevTime;

示例用法

简单用法

假设有两个函数,分别是 very_long_operation()another_op(),它们需要非常长的时间来执行。然后我们可以像下面这样测试它们的执行时间

fn main() {
    let mut timer = DevTime::new_simple();
    timer.start();
    very_long_operation();
    timer.stop();
    println!("The operation took: {} ns", timer.time_in_nanos().unwrap());
    // You can keep re-using the timer for other operations
    timer.start(); // this resets the timer and starts it again
    another_op();
    timer.stop();
    println!("The operation took: {} secs", timer.time_in_secs().unwrap());
    println!("The operation took: {} milliseconds", timer.time_in_millis().unwrap());
    println!("The operation took: {} microseconds", timer.time_in_micros().unwrap());
    println!("The operation took: {} ns", timer.time_in_nanos().unwrap());

    // With version 1.1.0 and upwards
    timer.start_after(&std::time::Duration::from_secs(2));
    // The timer will start after two seconds
    // Do some huge operation now
    timer.stop();
    println!("The operation took: {} nanoseconds", devtimer.time_in_nanos().unwrap());
}

示例:基准测试

use devtimer::run_benchmark;
fn main() {
  // We will simulate a long operation by std::thread::sleep()
  // Run 10 iterations for the test
  let bench_result = run_benchmark(10, |_| {
    // Fake a long running operation
    std::thread::sleep(std::time::Duration::from_secs(1);
  });
  bench_result.print_stats();
}

高级基准测试

run_benchmark() 函数还提供了一个可以使用的 usize 类型,例如,如果您想从数组中获取一些内容进行测试。例如

run_benchmark(100, |n| {
  do_action(data_source[n]);
});

示例:标签化计时器

use devtimer::DevTime;
fn main() {
  let mut cmplx = DevTime::new_complex();
  // Create a timer with tag `timer-1` 
  cmplx.create_timer("timer-1").unwrap();
  cmplx.start_timer("timer-1").unwrap();
  // Simulate a slow operation
  std::thread::sleep(std::time::Duration::from_secs(1));
  cmplx.stop_timer("timer-1").unwrap();
  
  // Create a timer with tag `cool-timer` 
  cmplx.create_timer("cool-timer").unwrap();
  cmplx.start_timer("cool-timer").unwrap();
  // Simulate a slow operation
  std::thread::sleep(std::time::Duration::from_secs(2));
  cmplx.stop_timer("cool-timer").unwrap();

  // We can output a benchmark in this way
  println!(" `cool-timer` took: {}", cmplx.time_in_micros("cool-timer").unwrap());

  // Or we can iterate through all timers
  for (tname, timer) in cmplx.iter() {
    println!("{} - {} ns", tname, timer.time_in_micros().unwrap());
  }

  // Or we can print results in the default '{timername} - {time} ns' format
  cmplx.print_stats();
}

可用的计时函数(名称具有自解释性)

  • time_in_secs() -> 返回操作所花费的秒数
  • time_in_millis() -> 返回操作所花费的毫秒数
  • time_in_micros() -> 返回操作所花费的微秒数
  • time_in_nanos() -> 返回操作所花费的纳秒数

请参阅完整的文档这里

许可证

本项目采用 Apache-2.0 许可证 授权。继续编码和基准测试!

无运行时依赖