10 个版本
0.1.9 | 2019年4月28日 |
---|---|
0.1.8 | 2019年4月28日 |
0.1.7 | 2019年2月27日 |
#238 in 性能分析
每月 21 次下载
11KB
140 行
Rust 的打印优化更容易
你可能听说过打印调试,但可能没有听说过打印家族中的小众成员:打印优化。有时测量代码某部分所用的时间很有趣,但你不需要设置整个程序的性能分析(或者你所在的环境中没有这个选项)。
在 Rust 中这样做目前需要一些样板代码,特别是如果你想打印出易于阅读的输出,可以直接导航到相关代码行。
你可以使用两种方法来测量经过的时间
- Lap:从上一个 lap(或起始点,如果是第一个 lap)测量经过的时间
- Split:从调用它的代码中的起始点测量经过的时间
以下是两个示例
use print_perf::*;
// or explicit print_perf::{perf, Perf};
use std::time::Duration;
use std::thread::sleep;
fn add(a: i32, b: i32) -> i32 {
sleep(Duration::from_millis(100));
a + b
}
fn main() {
let add_p = perf!("add fn");
let result = add(4, 4);
add_p.end();
// ^-- prints: 0.100140446 (add fn) @ [src/main.rs:9]
assert_eq!(result, 8);
}
您还可以这样添加 split 时间
use print_perf::*;
# use std::time::Duration;
# use std::thread::sleep;
fn add(a: i32, b: i32) -> i32 {
sleep(Duration::from_millis(100));
a + b
}
fn main() {
let p = perf!("add fn");
let _result = add(4, 4);
p.split("add");
let _div = _result / 2;
p.split("div");
p.end();
}
依赖项
我认为像这样的超级小便利代码块不应该引入任何依赖项,所以我尽量避免它们。这个包目前不依赖于其他任何包。
已知问题
颜色在所有窗口终端上输出可能不正确。在 Windows 发行版构建中禁用了颜色。
稳定性
此宏打印的确切输出不应依赖于它,并且可能在未来发生变化。
恐慌
如果写入 io::stderr
失败,则会引发恐慌。[stderr]: https://en.wikipedia.org/wiki/Standard_streams#Standard_error_(stderr)