使用 Benchmark.NET 测试代码性能
今天,我们将研究如何使用Benchmark.Net来测试代码性能。借助基准测试,我们可以创建基准来验证所做的更改是否按预期工作并且不会导致性能下降。
并非每个项目都需要进行基准测试,但是如果您正在开发的是NuGet程序包或通用dll,则很有意义。我们将使用它来解决一个古老的问题,字符串拼接,比如下面这样:
string myString = "string1" + "string2" + "string3" + "string4" + "string5"; Console.WriteLine(myString);
我们很多人都知道建议使用StringBuilder作为替代方法,并且速度要快得多,特别是在您有很多字符串的情况下。
StringBuilder sb = new StringBuilder(); sb.Append("string1"); sb.Append("string2"); sb.Append("string3"); sb.Append("string4"); sb.Append("string5"); Console.WriteLine(sb.ToString());
Benchmark.NET
首先,我们需要创建一个控制台项目,BenchmarkTesting.App
接下来,我们添加NuGet包 BenchmarkDotNet
然后,修改 program.cs文件中,把可访问性改成 public
现在我们可以创建一些测试方法,我们直接修改program.cs, 每个测试方法都需要 [Benchmark]
特性,我创建了三个示例,分别使用+运算符,Linq的Concat函数和使用StringBuilder拼接。
最后,在控制台应用程序的Main入口点中,添加 BenchmarkRunning Run命令:
然后我们使用下边的命令运行测试,或者直接使用VS启动项目,需要切换到Release模式下
dotnet run -p BenchmarkTesting.app.csproj -c Release
运行大约需要几分钟,基准测试工具在后台创建大量线程/作业并多次运行测试,为了获得一致的结果,建议最小化打开的应用程序,并且在运行时不要执行任何其他操作,输出如下所示,其中包含很多信息。
单位"us"是"μs"或微秒的缩写,一微秒等于一毫秒的1/1000。
由此可见,StringBuilder要比+运算符效率更高,Linq Concat函数也相对高效,但还是没有StringBuilder快。
总结
拼接字符串时使用StringBuilder! 本篇文章只是简单作的做了介绍,Benchmark.NET是测试性能的非常强大的工具,如果需要构建Nuget包,或者开发通用类库时,这将是一种很好的测试方法。
原文链接:https://samlearnsazure.blog/2021/01/12/measuring-code-performance-with-benchmark-net/
本文来自博客园,作者:古道轻风,转载请注明原文链接:https://www.cnblogs.com/88223100/p/Benchmark_Net_Useage.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2010-10-28 sqlserver 差异备份与还原示例
2010-10-28 360与QQ在用户界面上的明显BUG