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 性能分析
每月下载 56 次
在 2 crates 中使用
22KB
248 行
Devtimer
这是 Rust 的简洁而完整的基准测试套件。就这么简单。
原因
我看到了很多,很多 基准测试工具。然而,没有人意识到我们需要简单性来简化开发并提高生产力。 devtimer
为用 Rust 编写的代码提供了一个非常 简洁 而且完整的基准测试套件。它仅使用标准库来提供基准操作。您可以用来测试单个操作,也可以用来多次运行操作,并找到最小、最大和平均执行时间。由于这个 crate 没有外部依赖,它体积小、速度快,并且确实做到了它所声称的。祝您基准测试愉快!
需要从旧版本迁移的帮助?请参阅 变更日志。
用法
将以下内容添加到您的 cargo.toml
文件中
devtimer = "*"
然后在您的源文件中添加以下行(例如 main.rs
或 lib.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 许可证 授权。继续编码和基准测试!