【问题标题】:Timing C# code using Timer使用 Timer 对 C# 代码进行计时
【发布时间】:2012-05-30 06:30:44
【问题描述】:

即使在算法分析和 Big-Oh! 方面检查代码的性能也很好!我想看看代码在我的电脑上执行需要多少时间。我已将 List 初始化为 9999count 并从其中删除了偶数元素。可悲的是,执行此操作的时间跨度似乎是0:0:0。对结果感到惊讶,我的执行时间一定有问题。 有人可以帮我正确计时吗?

        IList<int> source = new List<int>(100);
        for (int i = 0; i < 9999; i++)
        {
            source.Add(i);
        }

        TimeSpan startTime, duration;
        startTime = Process.GetCurrentProcess().Threads[0].UserProcessorTime;

        RemoveEven(ref source);
        duration = Process.GetCurrentProcess().Threads[0].UserProcessorTime.Subtract(startTime);

        Console.WriteLine(duration.Milliseconds);
        Console.Read();

【问题讨论】:

    标签: c# algorithm time code-analysis


    【解决方案1】:

    最适合使用的是Stopwatch - 任何涉及TimeSpan 的东西远没有足够精确:

    var watch = Stopwatch.StartNew();
    // something to time
    watch.Stop();
    Console.WriteLine(watch.ElapsedMilliseconds);
    

    但是,现代 CPU 非常快,如果它可以在那个时候删除它们,我也不会感到惊讶。通常,对于计时,您需要多次重复操作才能获得合理的测量值。

    另外:RemoveEven(ref source) 中的 ref 几乎肯定不需要。

    【讨论】:

    • 所以我的代码是正确的,但用于测量的工具是错误的?那么在 c# 中,类总是通过引用传递吗?
    • @Deeptechtons 类实例的任何变量/参数/字段一个引用,所以你是传递一个引用。通过添加ref,您将传递一个引用,by-reference - 只有在您重新分配方法中的列表时才有用.
    【解决方案2】:

    在 .Net 2.0 中,您可以使用 Stopwatch

    IList<int> source = new List<int>(100);
    for (int i = 0; i < 9999; i++)
    {
        source.Add(i);
    }
    
    Stopwatch watch = new Stopwatch();
    
    watch.Start();
    RemoveEven(ref source);
    //watch.ElapsedMilliseconds contains the execution time in ms
    watch.Stop()
    

    【讨论】:

    • var stopwatch = new Stopwatch(); stopwatch.Start();的简写是var stopwatch = Stopwatch.StartNew();
    【解决方案3】:

    添加到以前的答案:

    var sw = Stopwatch.StartNew();
    
    // instructions to time
    
    sw.Stop();
    

    sw.ElapsedMilliseconds 返回一个长整数,分辨率为:

    1 毫秒 = 1000000 纳秒

    sw.Elapsed.TotalMilliseconds 返回一个双精度值,其分辨率等于Stopwatch.Frequency 的倒数。例如,在我的 PC 上,Stopwatch.Frequency 的值为 2939541 每秒滴答数,这使 sw.Elapsed.TotalMilliseconds 的分辨率为:

    1/2939541 秒 = 3,401891655874165e-7 秒 = 340 纳秒

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多