11 个稳定版本

3.0.1 2022年3月8日
3.0.0 2021年11月24日
2.0.4 2021年1月28日
1.0.3 2021年1月16日

#19 in 性能分析

Download history 51842/week @ 2024-03-14 53760/week @ 2024-03-21 49607/week @ 2024-03-28 47130/week @ 2024-04-04 46381/week @ 2024-04-11 46404/week @ 2024-04-18 47730/week @ 2024-04-25 48146/week @ 2024-05-02 49517/week @ 2024-05-09 49367/week @ 2024-05-16 49303/week @ 2024-05-23 53830/week @ 2024-05-30 68120/week @ 2024-06-06 74255/week @ 2024-06-13 68762/week @ 2024-06-20 59019/week @ 2024-06-27

279,389 每月下载量
267 个软件包中(直接使用12个) 使用

MIT/Apache

13KB
256

一个库,可以快速获取分配实例的实时/总数/最大计数。

#[derive(Default)]
struct Widget {
  _c: countme::Count<Self>,
  ...
}

let w1 = Widget::default();
let w2 = Widget::default();
let w3 = Widget::default();
drop(w1);

let counts = countme::get::<Widget>();
assert_eq!(counts.live, 2);
assert_eq!(counts.max_live, 3);
assert_eq!(counts.total, 3);

eprintln!("{}", countme::get_all());

lib.rs:

一个库,可以快速获取分配实例的实时/总数/最大计数。

示例


#[derive(Default)]
struct Widget {
  _c: countme::Count<Self>,
}

countme::enable(true);

let w1 = Widget::default();
let w2 = Widget::default();
let w3 = Widget::default();
drop(w1);

let counts = countme::get::<Widget>();
assert_eq!(counts.live, 2);
assert_eq!(counts.max_live, 3);
assert_eq!(counts.total, 3);

eprintln!("{}", countme::get_all());

配置

默认情况下,实现编译为无操作。因此,可以将 Count 字段包含在库类型中。

enable cargo 功能解除了计数代码的锁。该功能可以在 crate 图中的任何位置启用。

在运行时,使用 enable 函数来控制计数器。如果启用了 print_at_exit 功能,则默认启用计数。否则,默认禁用计数。在 main 中尽早调用 enable(true) 以启用

fn main() {
    countme::enable(std::env::var("COUNTME").is_ok());
}

代码针对运行时不启用计数的情况进行了优化(计数是宽松的加载和一个分支到函数调用)。

print_at_exit Cargo 功能使用 atexit 调用来在程序退出前打印最终计数(它还启用了运行时的计数)。仅当您无法修改主函数以打印计数时使用它 -- atexit 不保证与 rust 的运行时一起工作。

依赖项

~0–5.5MB