文章转载链接http://www.51testing.com/html/20/n-7804020.htmlhttp://www.51testing.com/html/20/n-7804020.html

  在软件开发领域,性能基准测试是确保软件系统高效、稳定运行的重要环节。它可以帮助你评估应用程序的性能,了解其在不同条件下的响应时间、吞吐量、资源利用率等。通过基准测试,你可以确定系统在处理特定工作负载时的性能表现。

  项目介绍

  BenchmarkDotNet是一个基于.NET开源、功能全面、易于使用的性能基准测试框架,它为.NET开发者提供了强大的性能评估和优化能力。通过自动化测试、多平台支持、高级统计分析和自定义配置等特性,BenchmarkDotNet帮助开发者更好地理解和优化软件系统的性能表现。

  项目特性

  · 支持的语言:C#、F#、Visual Basic。

  · 支持的操作系统WindowsLinux、macOS。

  · 支持的架构:x86、x64、ARM、ARM64、Wasm 和 LoongArch64。

  · 支持的运行时:.NET 5+、.NET Framework 4.6.1+、.NET Core 3.1+、Mono、NativeAOT。

  创建控制台应用

  创建名为:BenchmarkDotNetExercise的.NET 9控制台应用。

  安装 NuGet 包

  在NuGet包管理器中搜索:BenchmarkDotNet 包进行安装:

  进行性能基准测试

  接下来我们对.NET中常见的三种加密哈希函数:MD5、SHA256、SHA1进行性能基准测试,来一起分析一下哪一种哈希算法性能更优、效率更快。

  (1) HashFunctionsBenchmark

      [MemoryDiagnoser]//记录内存分配情况

      public class HashFunctionsBenchmark

      {

          private readonly string _inputData;

          public HashFunctionsBenchmark()

          {

              // 使用一个较长的字符串作为输入,以更好地反映哈希函数的性能

              _inputData = new string('y', 1000000);

          }

          [Benchmark]

          public byte[] MD5Hash()

          {

              using (MD5 md5 = MD5.Create())

              {

                  return md5.ComputeHash(Encoding.UTF8.GetBytes(_inputData));

              }

          }

          [Benchmark]

          public byte[] SHA256Hash()

          {

              using (SHA256 sha256 = SHA256.Create())

              {

                  return sha256.ComputeHash(Encoding.UTF8.GetBytes(_inputData));

              }

          }

          [Benchmark]

          public byte[] SHA1Hash()

          {

              using (SHA1 sha1 = SHA1.Create())

              {

                  return sha1.ComputeHash(Encoding.UTF8.GetBytes(_inputData));

              }

          }

      }

  (2) 运行基准测试

      internal class Program

      {

          static void Main(string[] args)

          {

              var summary = BenchmarkRunner.Run<HashFunctionsBenchmark>();

          }

      }

  注意一定要设置为:Release模式运行,假如为Debug模式会提示下面异常:

  // Validating benchmarks:

  //    * Assembly BenchmarkDotNetExercise which defines benchmarks is non-optimized

  Benchmark was built without optimization enabled (most probably a DEBUG configuration). Please, build it in RELEASE.

  If you want to debug the benchmarks, please see https://benchmarkdotnet.org/articles/guides/troubleshooting.html#debugging-benchmarks.

  (3) 分析生成的报告

  说明:

  · Mean: 所有测量值的算术平均值。

  · Error: 99.9% 置信区间的一半。

  · StdDev: 所有测量值的标准差。

  · Gen0: 第 0 代 GC 每 1000 次操作收集一次。

  · Gen1: 第 1 代 GC 每 1000 次操作收集一次。

  · Gen2: 第 2 代 GC 每 1000 次操作收集一次。

  · Allocated: 每次操作分配的内存(仅托管内存,包含所有内容,1KB = 1024B)。

  · 1 ms: 1 毫秒(0.001 秒)。

  报告分析:

  MD5Hash 的平均耗时稍长于 SHA1Hash,但误差和标准差较小,性能稳定性较好,垃圾回收次数与 SHA1Hash 相同。

  SHA256Hash 的平均耗时最长,但误差和标准差最小,性能稳定性最好,垃圾回收次数略少于 MD5Hash 和 SHA1Hash。

  SHA1Hash 的平均耗时最短,但误差和标准差较大,表示其性能虽然优越但不太稳定。

  性能测试多种格式输出

  · MarkdownExporter:导出Markdown格式。

  · AsciiDocExporter:导出AsciiDoc格式。

  · HtmlExporter:导出HTML格式。

  · CsvExporter:导出CSV(逗号分隔值)格式。

  · RPlotExporter:导出R绘图文件格式。

  [MarkdownExporter, AsciiDocExporter, HtmlExporter, CsvExporter, RPlotExporter]

  public class HashFunctionsBenchmark

  {

  }

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐