小编pid*_*pid的帖子

为什么基于 clap::Parser 读取的大量数字进行的计算比硬编码该数字时慢?

我有一个非常简单的程序,它从命令行获取整数参数并执行以下任务:

use clap::Parser ;

#[derive(Parser,Default)]
struct Args {
    #[arg(short)]
    number: u128
}

fn sum(n: u128) -> u128 {
    let mut result: u128 = 0;
    for i in 1..n { result += n/i; }
    result 
}

fn main() {
    let args = Args::parse() ;
    println!("{}", sum(args.number)) ;
}
Run Code Online (Sandbox Code Playgroud)

相当简单,对吧?好吧,当对“大”数字执行它时,例如 999999999,在我的机器上几乎需要十秒钟才能得到结果。

$ time ./target/release/main -n 999999999
20877697533

real    0m9.442s
user    0m9.370s
sys     0m0.030s
Run Code Online (Sandbox Code Playgroud)

但是,如果我禁止使用任何拍手并对值进行硬编码

$ time ./target/release/main -n 999999999
20877697533

real    0m9.442s
user    0m9.370s
sys     0m0.030s
Run Code Online (Sandbox Code Playgroud)

执行时间下降到两秒左右

$ time ./target/release/main
20877697533

real …
Run Code Online (Sandbox Code Playgroud)

rust

4
推荐指数
1
解决办法
93
查看次数

标签 统计

rust ×1