为什么计时器显示的如此违反直觉?

努尔伯·阿尔皮斯巴耶夫(Nurbol Alpysbayev)

我正在解析一些文本。我需要支持unicode文本,这就是为什么我要使用String::chars迭代器:

操场

use std::time::Instant;

fn main() {
    let text = "a".repeat(10000);
    let mut timer1 = 0;
    let mut timer2 = 0;

    let start1 = Instant::now();
    for pos in 1..10000 {
        let start2 = Instant::now();
        let ch = text.chars().nth(pos).unwrap();
        timer2 += start2.elapsed().as_millis();
    }
    timer1 += start1.elapsed().as_millis();

    println!("timer1: {} timer2: {}", timer1, timer2);
}

输出示例:

timer1: 4276 timer2: 133

当我认为它们应该彼此非常接近时,为什么timer2比令人难以置信的要小timer1

PS我已经知道那.nth很慢,不应该使用。

sky

您遇到了解决问题。循环内部执行平均需要不到一毫秒的时间,因此start2.elapsed().as_millis()通常求值为0。要解决此问题,您可以在循环内部执行一些操作,而该操作甚至需要更长的时间,或者将分辨率从毫秒更改为更小的值,例如微秒或纳秒。

切换到微秒会产生更一致的时间

use std::time::{Instant};

fn main() {
    let text = "a".repeat(10000);
    let mut timer1 = 0;
    let mut timer2 = 0;

    let start1 = Instant::now();
    for pos in 1..10000 {
        let start2 = Instant::now();
        let ch = text.chars().nth(pos).unwrap();
        timer2+=start2.elapsed().as_micros();
    }
    timer1+=start1.elapsed().as_micros();

    println!("timer1: {} timer2: {}", timer1, timer2);
}

输出

timer1: 3511812 timer2: 3499669

这个问题被标记为性能,因此我想指出使用std::Instant来衡量性能非常乏味。更好的方法包括criteria.rsfiregraphcargo-bench

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么计时器不触发?

来自分类Dev

为什么计时器输出未知?

来自分类Dev

为什么当计时器递减计数时,它从未在秒上显示0?

来自分类常见问题

为什么计时器停止时我的计时器崩溃?

来自分类Dev

为什么需要NSRunLoop来运行计时器?

来自分类Dev

为什么我的计时器Observable从未调用过?

来自分类Dev

如何重启倒数计时器,为什么跳过秒数

来自分类Dev

为什么不能通过函数安排计时器?

来自分类Dev

为什么我的Java计时器不起作用?

来自分类Dev

为什么计时器会自行启动?

来自分类Dev

为什么我不能停止计时器

来自分类Dev

ss -o显示的计时器信息是什么?

来自分类Dev

显示倒数计时器

来自分类Dev

为什么即使在bash中打印100位数字后,我的计时器仍显示相同的值

来自分类Dev

Actor计时器-注册计时器参数-为什么使用Func <object,Task>而不选择Func <Task>

来自分类Dev

为什么此Visual Studio计时器组件在设计时起作用?

来自分类Dev

为什么我的React应用程序中的后续警报显示给定会话中显示的第一个警报的“ useCountdown挂钩计时器”?

来自分类Dev

C ++ Ncurses显示计时器

来自分类Dev

在Java框架中显示计时器

来自分类Dev

在Blazor中显示计时器

来自分类Dev

TextView不显示计时器

来自分类Dev

在应用中显示计时器?

来自分类Dev

在TextView上显示CountDownTimer计时器

来自分类Dev

如何按计时器显示元素?

来自分类Dev

基于UITableView计时器的显示单元

来自分类Dev

C ++ Ncurses显示计时器

来自分类Dev

倒数计时器,不显示时间

来自分类Dev

为什么delphi ide会增加Windows平台计时器分辨率?

来自分类Dev

为什么每次激活此计时器后该变量都会保持重置状态?

Related 相关文章

热门标签

归档