OSS探訪

.NET methodを再現性のあるbenchmarkへ変換し、warmup・統計処理・diagnoser・exportを自動化する

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
11,506
主要言語
C#
ライセンス
MIT
リポジトリ最終更新
2026/09/30
ページ内ナビ

概要

BenchmarkDotNetは.NET methodをbenchmark experimentとして実行し、warmup、iteration数調整、統計集計、runtime/job比較、diagnoser、result exportを自動化するlibraryです。手書きmicrobenchmarkで起きやすい測定ミスを減らし、結果を共有可能なartifactとして残せます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

methodへBenchmark attributeを付けて測定experimentを定義する

測定対象methodへ[Benchmark]を付け、BenchmarkRunner.Run<T>()で実行する形から始められます。parameterやbaseline、jobを追加して比較条件を拡張できます。

出典:[1][2]

warmup・iteration・統計処理をrunnerへ任せる

BenchmarkDotNetはpilot、warmup、measurement iterationを調整し、測定結果の統計値を集約してsummary tableを生成します。

出典:[1]

diagnoserとexporterでmemory・disassembly・metricsを残す

memory allocationやdisassembly等のdiagnoser、CSV/JSON等のexporterを利用できます。0.15.8ではPrometheus互換のOpenMetrics exporterも追加されました。

出典:[2][4]

向いている用途

optimization前後やruntime差を再現可能なexperimentとして比較したい場合に向く

performance regressionの調査や実装候補の比較を、同じbenchmark definitionと環境条件で繰り返したい.NET projectに適します。

出典:[1]

導入前の確認

Release configurationで実行しDebug buildの数値を使わない

Getting Startedはbenchmark applicationをRelease configurationで実行することを要求します。READMEもnon-optimized assemblyやdebugger等、測定を乱す条件を警告対象にしています。

出典:[1][2]

hardware・runtime・background loadを固定して相対比較する

microbenchmarkは周辺環境の影響を受けるため、異なるmachineやruntimeの単発値を直接比較せず、同一条件でbaselineとの差分を追う運用が重要です。

出典:[1]

0.15.8はprocess deadlockとWASM trimming等のbug fixを含む

0.15.8はprocess output読取時のdeadlockやWASM project trimming等を修正しているため、古い0.15系から利用する場合はrelease noteを確認してversionを固定します。

出典:[4]

参考にした公式資料

  1. [1]BenchmarkDotNet 0.15.8 README(2026-10-04)
  2. [2]BenchmarkDotNet 0.15.8 Getting Started(2026-10-04)
  3. [3]BenchmarkDotNet 0.15.8 project targets(2026-10-04)
  4. [4]BenchmarkDotNet 0.15.8 release(2026-10-04)
  5. [5]BenchmarkDotNet MIT license(2026-10-04)
編集部からの補足

microbenchmarkは測定環境の影響を受けやすいため、単発の数値を性能保証として扱わない方が安全です。Release buildで実行し、同じruntime・hardware・電源状態など条件を固定して差分を比較してください。

3ステップで試す

  1. 1

    console projectへBenchmarkDotNet 0.15.8を追加する

    benchmark用console applicationを作成し、stable 0.15.8をversion固定で追加します。

    dotnet new console -n BdnDemo -f net10.0 && dotnet add BdnDemo/BdnDemo.csproj package BenchmarkDotNet --version 0.15.8
  2. 2

    最小benchmarkをProgram.csへ作成する

    [Benchmark]を付けたmethodを一つ用意し、BenchmarkRunnerから実行できるようにします。

    printf 'using BenchmarkDotNet.Attributes;\nusing BenchmarkDotNet.Running;\nBenchmarkRunner.Run<Bench>();\npublic class Bench { [Benchmark] public int Sum() => Enumerable.Range(1, 100).Sum(); }\n' > BdnDemo/Program.cs
  3. 3

    Release configurationでbenchmarkを実行する

    BenchmarkDotNetはoptimized Release buildで実行します。結果はconsoleとBenchmarkDotNet.Artifactsへ出力されます。

    dotnet run -c Release --project BdnDemo/BdnDemo.csproj
公式READMEで確認

成長

成長の推移 · 直近30日

11,506 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
35
Open PR
39

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • benchmark
  • benchmarking
  • c-sharp
  • dotnet
  • performance
  • csharp
  • hacktoberfest
Stars
11,506
Forks
1,075
Watchers
252
Open Issues
131
Contributors
271
所有者種別
Organization
主要言語
C#
ライセンス
MIT
リポジトリ最終更新
2026/09/30

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?