#print #performance #perf #measurement #time-measurement #measure-time #time

print_perf

Rust 的 ergonomics 打印优化。这个包将提供一种结构和辅助宏,您可以用来测量并打印代码中两个点之间的时间。

10 个版本

0.1.9 2019年4月28日
0.1.8 2019年4月28日
0.1.7 2019年2月27日

#238 in 性能分析

每月 21 次下载

Unlicense 或 MIT

11KB
140

Rust 的打印优化更容易

Crates.io Chrono on docs.rs

你可能听说过打印调试,但可能没有听说过打印家族中的小众成员:打印优化。有时测量代码某部分所用的时间很有趣,但你不需要设置整个程序的性能分析(或者你所在的环境中没有这个选项)。

在 Rust 中这样做目前需要一些样板代码,特别是如果你想打印出易于阅读的输出,可以直接导航到相关代码行。

你可以使用两种方法来测量经过的时间

  1. Lap:从上一个 lap(或起始点,如果是第一个 lap)测量经过的时间
  2. 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)

无运行时依赖