#logging #tracing #analysis #log #no-dependencies

einstein

structs 的时间和大小日志库

1 个不稳定版本

0.1.0 2022年3月24日

#380 in 日期和时间

MIT/Apache

18KB
384

einstein

structs 的时间和大小报告库。


此库旨在提供一种简单且无依赖的方式来跟踪项目中的一些调试变量。它包含一个 struct(TimeReport)和一个 trait(SizeReport)。

TimeReport

TimeReport 是一个简单的 struct,可用于跟踪完成任务所需的时间。它具有一个尽可能不干扰的简单 API。

示例

use einstein::TimeReport;
use std::time::Duration;

fn main() {
  let mut report = TimeReport::new("main-task");
  let start = report.start();
  
  // Let's do subtasks.
  for i in 0..10 {
      let subreport = do_some_work( report.subtask( format!("{}", i) ) );
      
      report.add(subreport);
  }
  
  // Here ends the report.
  report.end(start);
  
  println!("Time to the end of the report:\n{}", report);
}

fn do_some_work(mut report: TimeReport) -> TimeReport {
  let start = report.start();
  
  std::thread::sleep(Duration::from_secs(1));
  
  report.end(start);
  report
}

SizeReport

SizeReport 是一个 trait,它提供了一种轻松检查不同 structs 使用内存量的简单方法。它为 corestd 内置类型提供了内置支持。用户定义的类型必须自行实现它。

示例

fn main() {
fn main() {
  use einstein::SizeReport;
  use std::collections::HashMap;

  // Let's check how much memory does a Hashmap<String, Vec<usize>> use.
  let mut map = HashMap::new();
  
  // Start adding new stuff to it.
  for i in 0..10 {
    let key = format!("{}", i);
    let mut val = Vec::new();
    
    for _ in 0..i {
      val.push(0usize)
    }
    
    map.insert(key, val);
  }
  
  println!("Size of the hashmap: {} bytes", map.fullsize());
  println!("Direct (pointer + size + capacity + misc): {} bytes", HashMap::<String, Vec<usize>>::direct());
  println!("Indirect (Actual size of keys and values): {} bytes", map.indirect());
  println!("Indirect (Size collected of all children): {} bytes", map.children());
}

无运行时依赖