5个版本 (稳定版)

2.0.0 2023年7月28日
1.1.1 2023年7月24日
1.0.0 2023年7月16日
0.1.0 2023年7月7日

#130 in 性能分析

GPL-3.0-or-later

22KB
306

Rust性能指标

Build test Crates.io

Rust的Performance Measure库允许你测量代码的性能,并获得诸如平均值、最小值、最大值、中位数、方差、标准差和众数等基本统计信息。这个库特别适用于优化和分析Rust代码的效率。

入门指南

要开始测量性能,请按照以下步骤操作

  1. 使用Measurer::new(Option::None)创建一个新的Measurer实例。可选参数允许你控制Measurer将保留的样本数量。默认为1000个样本。

  2. 你有两种方式来测量性能

    • 使用闭包:在Measurer变量上调用measure_closure,传入你想要测量的闭包。这个函数将返回执行闭包的平均时间。
    • 手动测量:调用start_measure开始计时,然后执行你想要测量的代码。执行代码后,你可以调用stop_measure添加样本(如果未达到最大样本限制)或调用stop_measure_replace_old替换旧样本,一旦达到最大限制。这种方法更适合在循环内部测量性能。

支持多次测量的命名函数

已添加新的命名函数,允许你在单个Measurer实例中进行多次测量。这些命名函数允许你分别跟踪不同的测量。以下是使用方法

  1. 开始命名测量:调用start_measure_named("measurement_name")开始新的命名测量。将"measurement_name"替换为你测量的描述性名称。

  2. 停止命名测量:调用stop_measure_named("measurement_name")停止指定名称的命名测量。这将向命名测量添加一个样本。

  3. 停止命名测量并替换旧样本:调用 stop_measure_replace_old_named("measurement_name") 来停止命名测量,如果未达到最大样本限制,则添加一个新样本。一旦达到最大限制,此函数将替换命名测量中的旧样本。

  4. 检索命名测量统计信息:停止命名测量后,您可以检索该特定测量的各种统计信息,就像使用默认测量一样。使用函数如 get_min_namedget_max_namedget_median_namedget_variance_namedget_std_deviation_namedget_mode_namedget_samples_named 来访问命名测量的统计信息。

默认测量

非命名函数现在默认工作在称为 "default" 的测量上。如果您在使用 start_measurestop_measurestop_measure_replace_old 函数时没有明确指定测量名称,它们将在 "default" 测量上运行。

可用统计信息

在测量性能后,您可以检索各种统计信息,包括

  • 平均时间
  • 最小时间
  • 最大时间
  • 中位数时间
  • 方差
  • 标准差
  • 众数
  • 原始样本

要访问这些统计信息,请调用 Measurer 实例提供的相应函数。

绘图

您可以使用绘图函数绘制时间。要使用绘图,您必须启用 "plot" 功能。

保存样本

如果您希望将测量的样本保存到文件中,您可以使用 Measurer 实例提供的 save_samples 函数。

示例用法

以下是使用性能测量库的示例

use performance_measure::Measurer;

fn main() {
    // Create a Measurer with the default number of samples (1000)
    let mut measurer = Measurer::new(None);

    // Using closure measurement
    let average_time = measurer.measure_closure(|| {
        // Code to be measured goes here
        // For example, a time-consuming function or a loop
    });

    println!("Average time: {:.2} ms", average_time);

    // Manual measurement using start_measure and stop_measure
    measurer.start_measure();
    // Code to be measured goes here
    // For example, a time-consuming function inside a loop
    measurer.stop_measure();

    // Start a named measurement
    measurer.start_measure_named("named_measurement");

    // Code for the named measurement goes here
    // For example, another time-consuming function inside a loop

    // Stop the named measurement
    measurer.stop_measure_named("named_measurement");

    // Retrieve statistics for the named measurement
    let named_min_time = measurer.get_min_named("named_measurement");
    let named_max_time = measurer.get_max_named("named_measurement");
    let named_median_time = measurer.get_median_named("named_measurement");
    let named_variance = measurer.get_variance_named("named_measurement");
    let named_std_deviation = measurer.get_std_deviation_named("named_measurement");
    let named_mode = measurer.get_mode_named("named_measurement");

    // Plot the times
    measurer.plot();

    // Save samples to a file
    measurer.save_samples("performance_samples.txt").unwrap();
}

贡献

如果您发现任何问题或对改进有建议,请随时通过创建拉取请求或打开问题来为此项目做出贡献。

我们希望性能测量库在优化和分析您的 Rust 代码性能方面成为一个有价值的工具。快乐编码!

依赖项

~0–2.4MB
~58K SLoC