C# 标准性能测试

来源:http://www.51testing.com

  经常我写一个类,作为一个工具类,小伙伴会问我这个类的性能,这时我就需要一个标准的工具进行测试。 本文告诉大家如何使用 benchmarkdotnet 做测试。   现在在 github 提交代码,如果有小伙伴想要知道某个函数的性能,就会用 BenchmarkDotNet 进行测试。   例如我有一个函数 StooTer ,我定义这个函数的性能是非常高,我需要告诉大家在什么的设备运行,但是因为每个人的写法不一样,所以就比较难看。而且谁也不知道你是如何测试,也许使用 StopWatch 或 DateTime 来测试。   但是在 github 经常可以看到下面的测试

BenchmarkDotNet=v0.10.14, OS=Windows 10.0.17134  Intel Core i7-6700 CPU 3.40GHz (Skylake), 1 CPU, 8 logical and 4 physical cores  .NET Core SDK=2.1.201   [Host] : .NET Core 2.0.7 (CoreCLR 4.6.26328.01, CoreFX 4.6.26403.03), 64bit RyuJIT [AttachedDebugger]   DefaultJob : .NET Core 2.0.7 (CoreCLR 4.6.26328.01, CoreFX 4.6.26403.03), 64bit RyuJIT

  Method Mean Error StdDev   StooTer 384.6 ns 7.687 ns 9.721 ns   这就是使用工具 BenchmarkDotNet 进行测试。   下面让我告诉大家如何入门 BenchmarkDotNet 进行测试。   首先通过 Nuget 安装 BenchmarkDotNet ,推荐使用命令行安装的方法,因为VisualStudio的速度太慢   Install-Package BenchmarkDotNet   先来写一个被测试的函数

public class Foo   {   [Benchmark]   public void StooTer()   {   var seenoserBojemchay = new Foo[1000];   var sowrornarLeedeLeetall = new Span<Foo>(seenoserBojemchay, 10, 100);   foreach (var temp in sowrornarLeedeLeetall)   {      }   }   }

  在被测试的函数上面加上特性 Benchmark ,注意引用using BenchmarkDotNet.Attributes才可以这样写   函数用了 Span ,请看C# Span 入门   现在可以在 Main 函数使用下面代码进行测试    var boKar = BenchmarkRunner.Run<Foo>();   注意需要引用using BenchmarkDotNet.Running,并且在 Release 运行

  运行的时候就可以看到显示很多测试,而且从输入的文件夹还可以找到这样的文件,这个文件放在 $(bin)Release\$(TargetFramework)\BenchmarkDotNet.Artifacts\ 文件夹,直接打开就可以找到

  这时看到的就是标准的测试,可以把这个测试告诉小伙伴   那么这个输出表格是什么意思,例如测试了 Csdn 方法,这时的输出表格请看下面   Method Mean Error StdDev   Csdn 384.6 ns 7.687 ns 9.721 ns   Mean 的意思是 Arithmetic mean of all measurements 所有测量的算术平均值   Error 的意思是 Half of 99.9% confidence interval 99.9% 一半的置信度区间   StdDev 是所有测量的标准偏差   在测试过程包括   Pilot: 决定运行几次。   IdleWarmup, IdleTarget:评估BenchmarkDotNet这个工具带来的额外开销。   MainWarmup:测试热身。   MainTarget:测试。   Result:测试结果减去BenchmarkDotNet带来的额外开销。   除了方法可以测试,静态方法也可以测试,使用方法和上面一样

public class Foo   {   [Benchmark]   public static void StooTer()   {   var seenoserBojemchay = new Foo[1000];   var sowrornarLeedeLeetall = new Span<Foo>(seenoserBojemchay, 10, 100);   foreach (var temp in sowrornarLeedeLeetall)   {      }   }   }

  如果在运行出现下面输出,那么请检查是否在 Release 运行,右击项目属性看是否开启优化代码

Validating benchmarks:  Assembly MerRear which defines benchmarks is non-optimized  Benchmark was built without optimization enabled (most probably a DEBUG configuration). Please, build it in RELEASE

欢迎参加众测:

https://wap.ztestin.com/site/register?usercode=FAAAQwMQGAAXAwQBA3QhExcDHAQDPjVaABMIQg%3D%3D

本文分享自微信公众号 - 软件测试培训(iTestTrain)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 现身说法:37岁老码农找工作

    他说他们部门调整,虽然最后他留了下来,但还是非常焦虑。人无远虑必有近忧,他这次被刺激到了,想提高一下自己,以免下次再有类似的心惊肉跳。但怎么提高呢?

    Java技术栈
  • 推动云ERP成功的十大因素

    通常,这是产品质量最紧迫的问题。生产效率;在销售,工程和生产之间断开连接;并满足订单交付日期,从而激励组织进行改进。高增长的组织面临这些挑战甚至更多,这通常是因...

    深圳ERP
  • ASP.NET Core 3.0 gRPC 身份认证和授权

    本文算是对于 ASP.NET Core 3.0 gRPC 研究性学习的最后一篇了,以后在实际使用中,可能会发一些经验之文。本文主要讲 ASP.NET Core ...

    梁规晓
  • 理解跨域资源共享

    CORS 或跨域资源共享是一种 http 机制,它允许用户通过使用一些额外的头来访问别的域的资源。例如,假设位于http://test1.domain.com上...

    madneal
  • .NET资源泄露与处理方案

    很常见的现象是分不清哪些对象需要释放,对于控件、Stream等一些非托管资源也只管新增,却没有释放,功能是实现了,却埋了颗不小的雷。

    梁规晓
  • .net core 在windows下创建web应用

    一、下载并安装.net sdk及.net runtime,链接https://dotnet.microsoft.com/download,

    Arno
  • 目标检测领域笔记一:四种算法入门与优缺对比

    RCNN-> SPP net -> Fast RCNN -> Faster RCNN

    十四君
  • C#程序员的福音来啦,Blazor框架概览

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    乐百川
  • .NET做人脸识别并分类

    在游乐场、玻璃天桥、滑雪场等娱乐场所,经常能看到有摄影师在拍照片,令这些经营者发愁的一件事就是照片太多了,客户在成千上万张照片中找到自己可不是件容易的事。在一次...

    梁规晓
  • 云计算与虚拟化有什么区别

    “云”和“虚拟化”这两个术语常常让人产生困惑,常认为这两个词意味着相同的东西。实际上,“云服务器”和“虚拟化专用服务器(VPS)”虽然技术相似,但是您需要了解它...

    用户6784083

扫码关注云+社区

领取腾讯云代金券