NET Core中的性能测试工具BenchmarkDotnet 背景

 

背景介绍

之前一篇博客中,我们讲解

BenchmarkDotNet是一款强力的.NET性能基准测试库, 官网https://benchmarkdotnet.org/。

运行时支持

BenchmarkDotnet为每个被测试的方法提供了孤立的环境, 使用BenchmarkDotnet, 程序员可以很容易的编写各种性能测试方法,并可以避免许多常见的坑。

代码基准测试(Code Benchmarking)

现在我们希望来对比一下Linq to object中First和Single方法的性能

虽然我们知道First的性能肯定比Single高, First方法会在查询到第一个满足条件的对象之后就停止集合遍历,而Single找到第一个满足条件的对象之后,不会停止查找,它会去继续查找集合中的剩余对象,直到遍历整个集合或者在集合中找到第二个匹配条件的对象。 这里我们只是为了演示一下如何进行代码基准测试。

为了使用BenchmarkDotNet来进行代码基准测试,我们首先创建一个空的.Net Core控制台程序。

然后我们使用Package Manage Console添加BenchmarkDotNet库

PM> Install-Package BenchmarkDotNet

然后我们修改Program.cs文件, 代码如下

    public class Program     {         public class SingleVsFirst         {             private readonly List<string> _haystack = new List<string>();             private readonly int _haystackSize = 1000000;             private readonly string _needle = "needle";              public SingleVsFirst()             {                 //Add a large amount of items to our list.                  Enumerable.Range(1, _haystackSize).ToList().ForEach(x => _haystack.Add(x.ToString()));                 //Insert the needle right in the middle.                  _haystack.Insert(_haystackSize / 2, _needle);             }              [Benchmark]             public string Single() => _haystack.SingleOrDefault(x => x == _needle);              [Benchmark]             public string First() => _haystack.FirstOrDefault(x => x == _needle);          }          public static void Main(string[] args)         {             var summary = BenchmarkRunner.Run<SingleVsFirst>();             Console.ReadLine();         }     }

代码解释说明

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信