#性能分析 #秒表 #计时器 #持续时间 #瞬间

onestop

跨多个上下文/线程计时和汇总。还有其他功能?

2个版本

0.0.2 2023年3月30日
0.0.1 2022年12月13日

#566 in 调试

每月 24 次下载
用于 bbscope

MIT 许可证

15KB
230

这是什么?

我需要一个方法来从程序的各个不同部分对代码段进行计时,但用单个列表跟踪它们以便以后输出。例如,我在Web请求期间计时渲染代码、数据库代码和其他代码,然后将输出包含在页面本身中用于调试。

示例

let mut stopwatch = onestop::OneDuration::new(format!("postrender#789"));
some_long_task();
stopwatch.finish();
println!("It took {:?}", stopwatch.duration);

好的,但是...?

您可以使用 std::time::Instant (此代码使用) 完成上述操作,但现在让我们使用线程安全的共享列表使其更有用

struct Service1 {
    timings: OneList<OneDuration> // The other thing in this crate
}
struct Service2 {
    timings: OneList<OneDuration>
}

impl Service1 {
    fn do_stuff(&self) -> {
        onestop!{(self.timings, "service1_dostuff") => {
           assert_eq!(4, 4);
        }};
    }
}

impl Service2 {
    fn do_stuff(&self) -> {
        onestop!{(self.timings, "service2_dostuff") => {
            println!("did service2 things!");
        }};
    }
}

// Clones of OneList are threadsafe reference-counted pointers to the original list
// stored here in 'all_timings'
let all_timings = OneList::<OneDuration>::new();
let service1 = Service1 { all_timings.clone() };
let service2 = Service2 { all_timings.clone() };

service1.do_stuff();
service2.do_stuff();

// Both go to the same list, which you can then print out somewhere later
assert_eq(2, all_timings.list_copy().len());

但是,真的是这样

是的,这个库基本没有用!

依赖项

~205KB