【问题标题】:Does it take some time to start and stop Stopwatch?启动和停止秒表是否需要一些时间?
【发布时间】:2012-11-06 18:06:12
【问题描述】:

我有一个非常具体的问题,我需要回答一个非常具体的性能测试。我将简化代码,使其更容易理解。

我做了很多计算(几千万),所有这些都是在本身不太长的循环中完成的,我需要总计算时间。然而,所有的计算都不是一个接一个地直接完成的,而且每个循环都会“夹在中间”一些额外的代码。

我需要的是所有循环的总时间(包括声明和初始化 i、递增它以及与示例中的 100 进行比较)。为了测量我在每个循环之前直接启动Stopwatch 并在循环之后直接停止它的时间。但是这两个动作是否需要一些可能相关的时间?

示例:

Stopwatch sw = new Stopwatch();

sw.Start();
//how long does it now take until for loop is reached?
for(int i = 0; i < 100; i++)
{
    //some calculations
}
//how much time does it take to stop sw?
sw.Stop();

当然,如果所有循环都直接一个接一个地完成并不重要,我可以从第一个循环的开头开始并在最后一个循环的结尾停止,但这在这里是不可能的。

我知道这个问题非常具体,但我希望有人可以在这里帮助我,因为来自大约 5000 万个循环的大量时间可能会在某种程度上影响我的结果。

【问题讨论】:

    标签: c# wpf time stopwatch


    【解决方案1】:

    我需要的是所有循环的总时间。为了测量我在每个循环之前直接启动秒表并在循环之后直接停止它的时间。但是这两个动作是否需要一些可能相关的时间?

    它们需要一些时间——i 的初始化、增量以及每次循环迭代中与 100 的比较也是如此。在计算中几乎没有什么是瞬时的。

    它是否相关是另一回事。除非您的计算非常微不足道,否则这在您的时间安排中不太可能很重要。您可以尝试为空循环计时,但 JIT 编译器可能会完全摆脱循环本身。

    【讨论】:

    • 一切都是相关的(i 的初始化、增量、比较),除了到达 for 循环的实际时间。计算非常简单(有时只需添加几个),有时循环非常短(大约 10 次迭代)。我认为这是暗示,我会更新我的问题。
    • @phil13131:到那时,要获得任何真正的性能衡量标准变得非常困难。正如我所说,您可以 try 空循环 - 或尝试避免 JIT 编译器优化它的最小的非平凡操作 - 以找到基本结果。但从根本上说,答案听起来像是“是的,行动需要一些时间”。请注意,如果您事先调用 StartStop 方法(可能在不同的实例上)会有所帮助,因此它们将被 JIT 编译。 (否则 JIT 编译可能是您测量的一部分......)
    • 感谢您提到 JIT 编译,但是当您到达 sw.Start() 方法时,此时代码不应该已经编译了吗?
    • @phil13131:不一定。我不想不检查就说。 (您正在运行的方法将已编译,但 StartStop 可能还没有...)
    【解决方案2】:

    好吧,你可以试试这个并自己检查,在我的(性能很差的)计算机上,第一次执行大约需要 0.0006 毫秒,下一次执行大约需要 0.0001 毫秒。自己试试吧:

    Stopwatch sw = new Stopwatch();
    sw.Start();
    sw.Stop();
    TimeSpan ts = TimeSpan.FromTicks(sw.ElapsedTicks);
    string elapsed = ts.TotalMilliseconds.ToString();
    

    【讨论】:

    • 感谢您提及 StopWatch-Stopwatch 错字。我只是习惯于使用Stopwatch StopWatch = new Stopwatch(); 并以某种方式使用大写W。对于您的回答:谢谢,我曾想过这样做,但我想,这可能是“不同的情况”。但是,作为检查,我可能会运行你的代码几千次,然后平均运行一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2021-06-27
    相关资源
    最近更新 更多