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 性能分析
22KB
306 行
Rust性能指标
Rust的Performance Measure库允许你测量代码的性能,并获得诸如平均值、最小值、最大值、中位数、方差、标准差和众数等基本统计信息。这个库特别适用于优化和分析Rust代码的效率。
入门指南
要开始测量性能,请按照以下步骤操作
-
使用
Measurer::new(Option::None)
创建一个新的Measurer实例。可选参数允许你控制Measurer将保留的样本数量。默认为1000个样本。 -
你有两种方式来测量性能
- 使用闭包:在Measurer变量上调用
measure_closure
,传入你想要测量的闭包。这个函数将返回执行闭包的平均时间。 - 手动测量:调用
start_measure
开始计时,然后执行你想要测量的代码。执行代码后,你可以调用stop_measure
添加样本(如果未达到最大样本限制)或调用stop_measure_replace_old
替换旧样本,一旦达到最大限制。这种方法更适合在循环内部测量性能。
- 使用闭包:在Measurer变量上调用
支持多次测量的命名函数
已添加新的命名函数,允许你在单个Measurer实例中进行多次测量。这些命名函数允许你分别跟踪不同的测量。以下是使用方法
-
开始命名测量:调用
start_measure_named("measurement_name")
开始新的命名测量。将"measurement_name"
替换为你测量的描述性名称。 -
停止命名测量:调用
stop_measure_named("measurement_name")
停止指定名称的命名测量。这将向命名测量添加一个样本。 -
停止命名测量并替换旧样本:调用
stop_measure_replace_old_named("measurement_name")
来停止命名测量,如果未达到最大样本限制,则添加一个新样本。一旦达到最大限制,此函数将替换命名测量中的旧样本。 -
检索命名测量统计信息:停止命名测量后,您可以检索该特定测量的各种统计信息,就像使用默认测量一样。使用函数如
get_min_named
、get_max_named
、get_median_named
、get_variance_named
、get_std_deviation_named
、get_mode_named
和get_samples_named
来访问命名测量的统计信息。
默认测量
非命名函数现在默认工作在称为 "default" 的测量上。如果您在使用 start_measure
、stop_measure
或 stop_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