nanoFramework.Benchmark 1.0.73

前缀已保留
dotnet add package nanoFramework.Benchmark --version 1.0.73                
NuGet\Install-Package nanoFramework.Benchmark -Version 1.0.73                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="nanoFramework.Benchmark" Version="1.0.73" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用该包。
paket add nanoFramework.Benchmark --version 1.0.73                
#r "nuget: nanoFramework.Benchmark, 1.0.73"                
#r 指令可用于 F# Interactive 和多语言笔记本。将此内容复制到交互式工具或脚本源代码中以引用包。
// Install nanoFramework.Benchmark as a Cake Addin
#addin nuget:?package=nanoFramework.Benchmark&version=1.0.73

// Install nanoFramework.Benchmark as a Cake Tool
#tool nuget:?package=nanoFramework.Benchmark&version=1.0.73                

nanoFramework.Benchmark

Quality Gate Status Reliability Rating #yourfirstpr Discord

nanoFramework logo


欢迎来到 .NET nanoFramework Benchmark 仓库

构建状态

组件 构建状态 NuGet 包
nanoFramework.Benchmark Build Status NuGet

什么是 .NET nanoFramework Benchmark

nanoFramework.Benchmark 工具可帮助您测量和跟踪 nanoFramework 代码的性能。只需添加一个属性,您就可以轻松地将常规方法转换为基准测试!

深受 BenchmarkDotNet 启发。

下面的示例将

  1. 在运行任何基准测试方法之前运行一次 Setup 方法。
  2. 运行每个基准测试方法 10 次。
  3. 准备要传递给每个解析器(parsers)的数据。
  4. 调用 ConsoleParser(将数据打印到控制台以表的形式)。
public class CompareObjectTypesBenchmark
{
    object[] array;

    [Setup]
    public void Setup()
    {
        array = new object[] {
                    (int)42,
                    (byte)42,
                    "This is a super string",
                    (ulong)42,
                    new Version(4, 2)
                };
    }

    [Benchmark]
    public void CompareByString()
    {
        for (int i = 0; i < array.Length; i++)
        {
            object obja = array.GetValue(i);
            var typea = obja.GetType();
            CompareUsingString(typea);
        }
    }

    [Benchmark]
    public void CompareUsingTypeofIf()
    {
        for (int i = 0; i < array.Length; i++)
        {
            object obja = array.GetValue(i);
            var typea = obja.GetType();
            CompareUsingTypeofIf(typea);
        }
    }

    [Benchmark]
    public void CompareUsingTypeofIfReturn()
    {
        for (int i = 0; i < array.Length; i++)
        {
            object obja = array.GetValue(i);
            var typea = obja.GetType();
            CompareUsingTypeofIfReturn(typea);
        }
    }
}

输出

Console export: CompareObjectTypesBenchmark benchmark class.
| MethodName                 | ItterationCount | Mean  | Min   | Max   |
| -------------------------------------------------------------------- |
| CompareByString            | 10              | 10 ms | 10 ms | 10 ms |
| CompareUsingTypeofIf       | 10              | 3 ms  | 0 ms  | 10 ms |
| CompareUsingTypeofIfReturn | 10              | 5 ms  | 0 ms  | 10 ms |

如何运行 .NET nanoFramework Benchmark

基准测试必须在真实硬件上运行。(注意 - 如果您运行许多迭代并且您的硬件没有足够的内存,则可能会收到 OutOfMemory 异常。)

  1. 使用“空白应用程序(nanoFramework)”模板创建基准测试项目

image

  1. 将 Program.cs 文件更新为以下内容
public class Program
{
    public static void Main()
    {
        BenchmarkRunner.Run(typeof(IAssemblyHandler).Assembly);
        Thread.Sleep(Timeout.Infinite);
    }
}
public interface IAssemblyHandler { }
  1. 将该 nanoFramework.Benchmark NuGet 包添加到项目中

image

  1. 最后将 nanoFramework 设备连接到计算机并运行基准测试项目

属性

迭代计数

指定在运行基准方法时每个基准方法需要调用的次数。默认为10。

日志记录器

有时您可以尝试基准库不支持的内容。在这种情况下,您可能会尝试注入日志对象而不是调试代码。

DebugLogger

包装在 nanoFramework.Logging.Debug 中的类。将日志输出到控制台。

方法

Setup

SetupAttribute 用于指定在运行基准方法之前应该只调用一次的方法。它可以用于初始化集合/对象等。设置方法的执行时间不计入基准结果的计算。

请注意,设置方法必须是公共的并且没有参数。

Benchmark

BenchmarkAttribute 用于指定应该作为基准调用的方法。

请注意,基准方法必须是公共的并且没有参数。

Baseline

BaselineAttribute 用于指定应作为计算基准的方法。在输出中添加新的“比率”列。

Console export: CompareObjectTypesBenchmark benchmark class.
| MethodName                 | ItterationCount | Mean   | Ratio  | Min   | Max   |
| ------------------------------------------------------------------------------ |
| CompareByString            | 100             | 10 ms  | 1.0    | 10 ms | 10 ms |
| CompareUsingTypeofIf       | 100             | 5.9 ms | 0.5900 | 0 ms  | 10 ms |
| CompareUsingTypeofIfReturn | 100             | 5.5 ms | 0.5500 | 0 ms  | 10 ms |

解析器

您可以在类上指定解析器作为属性。每个解析器都会在基准运行后调用,因此您可以用多种格式获取结果。

默认情况下,仅应用 ConsoleParser。

可以通过创建新类并实现 IResultParses 接口轻松实现新的解析器。还需要创建新的属性。

ConsoleParser

您可以使用 CsvParserAttribute 添加打印表格格式数据的解析器。

输出示例

Console export: CompareObjectTypesBenchmark benchmark class.
| MethodName                 | ItterationCount | Mean   | Min  | Max   |
| -------------------------------------------------------------------- |
| CompareByString            | 100             | 8.9 ms | 0 ms | 10 ms |
| CompareUsingTypeofIf       | 100             | 4.1 ms | 0 ms | 10 ms |
| CompareUsingTypeofIfReturn | 100             | 4.2 ms | 0 ms | 10 ms |
CsvParser

您可以使用 CsvParserAttribute 添加打印 CSV 格式数据的解析器。

输出示例

CSV export: CompareObjectTypesBenchmark benchmark class.
MethodName;ItterationCount;Mean;Min;Max
CompareByString;100;8.9 ms;0 ms;10 ms
CompareUsingTypeofIf;100;4.1 ms;0 ms;10 ms
CompareUsingTypeofIfReturn;100;4.2 ms;0 ms;10 ms

反馈和文档

有关文档、提供反馈、问题及了解如何贡献的信息,请参阅 主仓库

加入我们的 Discord 社区 这里

致谢

此项目的贡献者名单可在 CONTRIBUTORS 中找到。

许可证

nanoFramework 类库在 MIT 许可证 下发布。

行为准则

本项目已采用贡献者协议定义的行为准则,以阐明我们对社区中期望行为的看法。有关更多信息,请参阅 .NET Foundation 行为准则

.NET Foundation

此项目由 .NET Foundation 支持。

产品 兼容并与计算附加的目标框架版本。
.NET Framework net 是兼容的。
兼容目标框架
包含目标框架(在包中)
了解更多关于 目标框架.NET Standard 的信息。

NuGet 包

此包不被任何 NuGet 包使用。

GitHub 仓库

此包不被任何知名 GitHub 仓库使用。

版本 下载 最后更新
1.0.73 92 8/5/2024
1.0.72 111 7/25/2024
1.0.71 141 7/15/2024
1.0.68 283 6/3/2024
1.0.65 701 11/20/2023
1.0.62 238 11/10/2023
1.0.60 143 11/9/2023
1.0.58 111 11/9/2023
1.0.56 362 5/25/2023
1.0.53 212 5/4/2023
1.0.50 433 1/5/2023
1.0.47 308 12/29/2022
1.0.45 301 12/28/2022
1.0.43 320 12/27/2022
1.0.39 611 11/14/2022
1.0.37 416 10/29/2022
1.0.35 411 10/27/2022
1.0.33 420 10/26/2022
1.0.31 402 10/25/2022
1.0.29 429 10/24/2022
1.0.26 491 10/11/2022
1.0.24 439 10/8/2022
1.0.21 457 9/23/2022
1.0.19 445 9/17/2022
1.0.17 441 9/15/2022
1.0.15 416 9/6/2022
1.0.13 396 9/6/2022
1.0.8 403 9/5/2022
1.0.4 416 9/2/2022