gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:29:11 25 4
gpt4 key购买 nike

我有这个代码:

    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

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

最佳答案

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

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 毫秒中的 15 毫秒)。这是正常的,因为操作系统实际为线程分配时间片时存在不确定性......(如果我没记错的话,在 Windows 操作系统中,这通常只有 20 毫秒!)

您在控制台输出中看到的较大差异几乎可以肯定是由于显示延迟造成的。

关于c# - 为什么这段代码的执行速度比预期的要快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/714266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com