当前位置:网站首页>Rust: performance test criteria Library
Rust: performance test criteria Library
2020-11-08 11:21:00 【osc_ju8o7gji】
In the field of quantification , High performance requirements , Especially high frequency trading , That's nanosecond . stay RUST in , Test a function , Or a time-consuming operation, that is, performance analysis , How to do it ?
One 、 timer
Whether it can be used std::time::systime To calculate the time spent ? Let's have a try :
use std::time::SystemTime;
pub struct Stock{
pub price:f64,
pub volume:i32,
pub code:String,
pub amount:f64,
}
impl Stock{
fn default()->Self{
let p =10000.0_f64;
let v =1_i32;
Stock{
price:p,
volume:v,
code:String::from("SH600036"),
amount: p*v as f64,
}
}
}
fn main() {
let now = SystemTime::now();
let stock = Stock::default();
let elapsed = now.elapsed().unwrap().as_nanos();
println!("cost time :{:?} ",elapsed);
}
You'll find that :
Why does it take to create a structure 3500 nanosecond , It's amazing . Actually , The real situation is not like this , It's because of the test error of the timer .
therefore , If you want to do a professional performance test , Or with the help of professional tripartite performance test library .
Two 、 Professional tripartite Library
RUST in , There are still many professional tripartite libraries , To push the library criterion.rs.
https://github.com/bheisler/criterion.rs
You can take a look at .
3、 ... and 、 example
1、 Create a test directory
In the engineering , Create a special test directory : I'm here in
my_bench Under the table of contents , Specifically created benches Catalog
2、toml file
about my_bench Under the project toml file
toml In file , increase :
[dev-dependencies]
criterion = "0.3"
[[bench]]
name = "my_benchmark"
harness = false
among ,name ="my_benchmark" It means something , It's not random . Here means , I am here my_bench Under the project , There is one my_benchmark.rs file , It has the performance test code I wrote . Don't go anywhere else .
3、 Prepare performance test code
because toml In file , Yes name =“my_benchmark” , that , The performance test code is my_benchmark.rs. Create this file .
Write the corresponding performance test code :
use criterion::{
black_box, criterion_group, criterion_main, Criterion};
pub struct Stock{
pub price:f64,
pub volume:i32,
pub code:String,
pub amount:f64,
}
impl Stock{
fn default()->Self{
let p =10000.0_f64;
let v =1_i32;
Stock{
price:p,
volume:v,
code:String::from("SH600036"),
amount: p*v as f64,
}
}
}
pub fn set_heap()->Stock{
Stock::default()
}
pub fn box_stock() ->Box<Stock>{
Box::new(Stock::default())
}
fn criterion_benchmark_heap(c: &mut Criterion) {
c.bench_function("stock ", |b| b.iter(|| set_heap()));
}
fn criterion_benchmark_box(c: &mut Criterion) {
c.bench_function("box<stock> ", |b| b.iter(|| box_stock()));
}
criterion_group!(benches, criterion_benchmark_heap,criterion_benchmark_box);
criterion_main!(benches);
4、 function
In all the engineering my_bench Next , function cargo bench, That is, you can run the performance test code .
Finished bench [optimized] target(s) in 2.80s
Running target\release\deps\my_bench-95230ab505784caf.exe
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Running target\release\deps\my_benchmark-a468db13a6ba0ea3.exe
Gnuplot not found, using plotters backend
stock time: [75.387 ns 83.206 ns 91.985 ns]
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mild
box<stock> time: [168.68 ns 189.43 ns 212.00 ns]
Found 3 outliers among 100 measurements (3.00%)
From above , We can get detailed test information , Including the time distribution of the operation .
Professional performance testing tools show that , Create a Stock object , It takes about the average 73ns, Not the timer 3500ns;
however , Create a Stock Of Box The object takes twice as long .
版权声明
本文为[osc_ju8o7gji]所创,转载请带上原文链接,感谢
边栏推荐
- Or talk No.19 | Facebook Dr. Tian Yuandong: black box optimization of hidden action set based on Monte Carlo tree search
- Windows10关机问题----只有“睡眠”、“更新并重启”、“更新并关机”,但是又不想更新,解决办法
- YGC troubleshooting, let me rise again!
- Python Gadgets: code conversion
- 漫画|讲解一下如何写简历&项目
- 用科技赋能教育创新与重构 华为将教育信息化落到实处
- laravel8更新之速率限制改进
- Personal current technology stack
- [data structure Python description] use hash table to manually implement a dictionary class based on Python interpreter
- Hematemesis! Alibaba Android Development Manual! (Internet disk link attached)
猜你喜欢
Xamarin 从零开始部署 iOS 上的 Walterlv.CloudKeyboard 应用
2020-11-05
On monotonous stack
Harbor项目高手问答及赠书活动
ArrayList源码分析
Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
阿里教你深入浅出玩转物联网平台!(附网盘链接)
It's 20% faster than python. Are you excited?
Analysis of istio access control
随机推荐
蘑菇街电商交易平台服务架构及改造优化历程(含PPT)
Bohai bank million level fines continue: Li Volta said that the governance is perfect, the growth rate is declining
How to deploy pytorch lightning model to production
C language I blog assignment 03
Automatically generate RSS feeds for docsify
Recommend an economic science video, very valuable!
OR Talk NO.19 | Facebook田渊栋博士:基于蒙特卡洛树搜索的隐动作集黑盒优化 - 知乎
墨者学院SQL注入解题
渤海银行百万级罚单不断:李伏安却称治理完善,增速呈下滑趋势
Major changes in Huawei's cloud: Cloud & AI rises to Huawei's fourth largest BG with full fire
The young generation of winner's programming life, the starting point of changing the world is hidden around
YGC troubleshooting, let me rise again!
浅谈单调栈
Research on WLAN direct connection (peer-to-peer connection or P2P) and cross platform research of IOS
Powershell 使用.Net对象发送邮件
If you don't understand the gap with others, you will never become an architect! What's the difference between a monthly salary of 15K and a monthly salary of 65K?
Rust:命令行参数与环境变量操作
函数周期表丨筛选丨值丨SELECTEDVALUE - 知乎
413【毕设课设】基于51单片机无线zigbee无线智能家居光照温湿度传输监测系统
PCIe enumeration process