【问题标题】:First Time Call with BenchmarkDotNet与 BenchmarkDotNet 的首次通话
【发布时间】:2017-05-13 07:30:24
【问题描述】:

我已经用一个简单的测试类试用了 BenchmarkDotNet

public class BenchTest
{
    bool First = false;

    [Benchmark]
    public void FirstTimeInitEffect()
    {
        if (First == false)
        {
            Console.WriteLine("First called");
            First = true;
            Thread.Sleep(1000);
        }
        else
        {
            Thread.Sleep(10);
        }

    }
}

让它运行

    static void Main(string[] args)
    {
        var cfg = ManualConfig.Create(DefaultConfig.Instance);
        var job = new Job();
        job.Accuracy.RemoveOutliers = false;
        cfg.Add(new Job[] {
            job
            }
        );

        BenchmarkRunner.Run<BenchTest>(cfg);
    }

这打印了一个很好的摘要,但我从结果中缺少的是对方法 FirstTimeInitEffect 的第一次调用需要 1 秒。我希望基准工具也能向我展示第一次通话效果。我尝试了一个自定义配置来防止删除异常值,但这并没有成功。是我用错了工具还是超出了工具的范围?

    // * Detailed results *
BenchTest.FirstTimeInitEffect: Job-LQPFTL(RemoveOutliers=False)
Runtime = Clr 4.0.30319.42000, 32bit LegacyJIT-v4.6.1586.0; GC = Concurrent Workstation
Mean = 10.8548 ms, StdErr = 0.0169 ms (0.16%); N = 15, StdDev = 0.0654 ms
Min = 10.7158 ms, Q1 = 10.8058 ms, Median = 10.8963 ms, Q3 = 10.9011 ms, Max = 10.9029 ms
IQR = 0.0953 ms, LowerFence = 10.6628 ms, UpperFence = 11.0440 ms
ConfidenceInterval = [10.8217 ms; 10.8879 ms] (CI 95%)
Skewness = -1.01049139924314, Kurtosis = 2.40561202562778


Total time: 00:00:21 (21.92 sec)

// * Summary *

BenchmarkDotNet=v0.10.1, OS=Microsoft Windows NT 6.2.9200.0
Processor=Intel(R) Core(TM) i7-4770K CPU 3.50GHz, ProcessorCount=8
Frequency=3417979 Hz, Resolution=292.5706 ns, Timer=TSC
  [Host]     : Clr 4.0.30319.42000, 32bit LegacyJIT-v4.6.1586.0
  Job-LQPFTL : Clr 4.0.30319.42000, 32bit LegacyJIT-v4.6.1586.0

RemoveOutliers=False  Allocated=0 B

              Method |       Mean |    StdDev |
-------------------- |----------- |---------- |
 FirstTimeInitEffect | 10.8548 ms | 0.0654 ms |

【问题讨论】:

    标签: c# .net performance benchmarking benchmarkdotnet


    【解决方案1】:

    BenchmarkDotNet 做了很多预热迭代;它允许在我们开始收集实际测量值之前达到稳定状态。此外,它还会执行一些额外的操作,这些操作也会调用您的方法(jitting、试验迭代等)。因此,第一次调用被省略了,也没有包含在摘要中。

    如果您想获得基于所有测量值的统计信息(没有抖动、试验和预热迭代),您应该使用RunStrategy.ColdStart(而不是默认的RunStrategy.Throughput)。从 BenchmarkDotNet v0.10.2 开始,它运行良好。

    源代码:

    [SimpleJob(RunStrategy.ColdStart, targetCount: 5)]
    [MinColumn, MaxColumn, MeanColumn, MedianColumn]
    public class BenchTest
    {
        private bool firstCall;
    
        [Benchmark]
        public void FirstTimeInitEffect()
        {
            if (firstCall == false)
            {
                firstCall = true;
                Console.WriteLine("// First call");
                Thread.Sleep(1000);
            }
            else
                Thread.Sleep(10);
        }
    }
    

    测量:

    Result 1: 1 op, 1000582715.59 ns, 1.0006 s/op
    Result 2: 1 op, 10190609.23 ns, 10.1906 ms/op
    Result 3: 1 op, 10164930.24 ns, 10.1649 ms/op
    Result 4: 1 op, 10604238.53 ns, 10.6042 ms/op
    Result 5: 1 op, 10420930.04 ns, 10.4209 ms/op
    

    详细结果:

    Mean = 208.4175 ms, StdErr = 198.1331 ms (95.07%); N = 5, StdDev = 443.0390 ms
    Min = 10.1163 ms, Q1 = 10.1203 ms, Median = 10.4233 ms, Q3 = 505.7118 ms, Max = 1,000.9497 ms
    IQR = 495.5915 ms, LowerFence = -733.2670 ms, UpperFence = 1,249.0991 ms
    ConfidenceInterval = [-179.9233 ms; 596.7583 ms] (CI 95%)
    Skewness = 1.07, Kurtosis = 2.08
    

    总结:

    BenchmarkDotNet=v0.10.1, OS=Microsoft Windows NT 6.2.9200.0
    Processor=Intel(R) Core(TM) i7-6700HQ CPU 2.60GHz, ProcessorCount=8
    Frequency=2531252 Hz, Resolution=395.0614 ns, Timer=TSC
      [Host]     : Clr 4.0.30319.42000, 32bit LegacyJIT-v4.6.1586.0
      Job-IQRRGS : Clr 4.0.30319.42000, 32bit LegacyJIT-v4.6.1586.0
    
    RunStrategy=ColdStart  TargetCount=5  Allocated=1.64 kB
    
                  Method |        Mean |      StdErr |      StdDev |        Min |           Max |     Median |
    -------------------- |------------ |------------ |------------ |----------- |-------------- |----------- |
     FirstTimeInitEffect | 208.4175 ms | 198.1331 ms | 443.0390 ms | 10.1163 ms | 1,000.9497 ms | 10.4233 ms |
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-18
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 2011-11-25
      相关资源
      最近更新 更多