nanoFramework.Benchmark 1.0.73
前缀已保留
dotnet add package nanoFramework.Benchmark --version 1.0.73
NuGet\Install-Package nanoFramework.Benchmark -Version 1.0.73
<PackageReference Include="nanoFramework.Benchmark" Version="1.0.73" />
paket add nanoFramework.Benchmark --version 1.0.73
#r "nuget: nanoFramework.Benchmark, 1.0.73"
// 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
欢迎来到 .NET nanoFramework Benchmark 仓库
构建状态
组件 | 构建状态 | NuGet 包 |
---|---|---|
nanoFramework.Benchmark |
什么是 .NET nanoFramework Benchmark
nanoFramework.Benchmark 工具可帮助您测量和跟踪 nanoFramework 代码的性能。只需添加一个属性,您就可以轻松地将常规方法转换为基准测试!
深受 BenchmarkDotNet 启发。
下面的示例将
- 在运行任何基准测试方法之前运行一次 Setup 方法。
- 运行每个基准测试方法 10 次。
- 准备要传递给每个解析器(parsers)的数据。
- 调用 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 异常。)
- 使用“空白应用程序(nanoFramework)”模板创建基准测试项目
- 将 Program.cs 文件更新为以下内容
public class Program
{
public static void Main()
{
BenchmarkRunner.Run(typeof(IAssemblyHandler).Assembly);
Thread.Sleep(Timeout.Infinite);
}
}
public interface IAssemblyHandler { }
- 将该 nanoFramework.Benchmark NuGet 包添加到项目中
- 最后将 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 是兼容的。 |
-
- nanoFramework.CoreLibrary (>= 1.15.5)
- nanoFramework.Logging (>= 1.1.108)
- nanoFramework.System.Collections (>= 1.5.31)
- nanoFramework.System.Diagnostics.Stopwatch (>= 1.2.586)
- nanoFramework.System.Text (>= 1.2.54)
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 |