当前位置:  开发笔记 > 编程语言 > 正文

为什么这段代码执行速度比预期的要快?

如何解决《为什么这段代码执行速度比预期的要快?》经验,为你挑选了2个好方法。

我有这个代码:

    public void replay() {
        long previous = DateTime.Now.Ticks;
        for (int i = 0; i < 1000; i++) {
            Thread.Sleep(300);
            long cur = DateTime.Now.Ticks;
            Console.WriteLine(cur - previous);
            previous = cur;
        }
    }

这被调用为一个单独的线程,如下所示:

        MethodInvoker replayer = new MethodInvoker(replay);
        replayer.BeginInvoke(null, null);

但是,如果我观察输出,它的行为很奇怪.它i成对输出.例如,它将等待一个完整的等待,然后输出i,然后快速输出下一个i,然后再次等待.为什么这样做,我该如何纠正呢?

它输出这个:

3125040
2968788
2968788
2968788
3125040
2968788
2968788
2968788
3125040
2968788
2968788
2968788
3125040

如果我将睡眠时间增加到一秒以上,则不会发生这种情况.



1> Charles Bret..:

更改代码以消除分析中的显示延迟:

public void replay() 
{        
    Thread.Sleep(5000);
    DateTime start = DateTime.Now;      
    for (int i = 0; i < 1000; i++) 
    {            
          Console.WriteLine(string.Format("Exec:{0} - {1} ms",
                i, DateTime.Now - start));
          start = DateTime.Now;
          Thread.Sleep(300);        
    }
}

查看修改后的输出,循环延迟中的方差小于5%(300中的15ms).这是正常的,因为操作系统实际上将时间片分配给线程时所涉及的不确定性......(如果我没记错,在Windows操作系统中,这通常只需要每20毫秒!)

您在控制台输出中感知到的较大差异几乎可以肯定是由于显示器的延迟.



2> Marc Gravell..:

无法重现.我想知道它是否是你机器本地的东西; 也许是缓冲.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有