麦克。BenchmarkRunner
快跑。NET基准测试。\ C#中的MCP(模型上下文协议)服务器,按需执行BenchmarkDotNet并返回结果和工件。使用 MCP检查员 和 Visual Studio中的GitHub Copilot聊天工具.
由维护 Aliaksandr Marozka — amarozka.dev
TL;DR——让你的AI“运行哈希基准测试”,获取Mean/Alloc增量和Markdown/JSON/CSV工件。非常适合演示MCP、PR中的性能检查或快速回归搜索。
______________________________________________________________________
✨ 特性
- MCP工具
- run_bench(filter?, job?, exporters?, timeoutSec?) –运行基准测试,获得 runId +JSON摘要 - get_results(runId) 解析的JSON摘要(Mean、Alloc/Op等) - list_artifacts(runId) –列出所有文件(JSON/Markdown/CSV/日志) - compare_runs(baseRunId, headRunId) –简单增量(平均值和分配字节/Op的变化百分比)
- 作业预设:
Short,Medium,Long - 出口商:
json,fulljson,md,csv - 客户:MCP检查器(stdio)和Visual Studio(副驾驶聊天工具)
______________________________________________________________________
🗂 项目布局
Mcp.BenchmarkRunner.sln
│
├─ src/
│ ├─ Mcp.BenchmarkRunner.Server/ # MCP server (console)
│ │ ├─ Program.cs # host + stdio transport + attribute discovery
│ │ └─ Tools/
│ │ ├─ BenchTools.cs # run_bench / get_results / list_artifacts
│ │ └─ CompareTools.cs # compare_runs
│ │
│ └─ SampleBenchmarks/ # BenchmarkDotNet executable
│ ├─ Program.cs # CLI: --artifacts/--exporters/--job/--filter
│ ├─ Jobs.cs # Short/Medium/Long presets
│ └─ HashBench.cs # MD5 vs SHA256 demo
│
└─ runs/ # output per runId (created at runtime)流动:检查员/副驾驶→ MCP服务器(stdio)→ 生成 dotnet run 在…上 SampleBenchmarks → BDN写入工件→ 服务器返回JSON/paths。
______________________________________________________________________
🚀 快速启动
先决条件
- .NET SDK 9.0(或将两个项目都切换到 .NET 8.0)
- (可选)用于MCP检查器的Node.js(
npx)
构建和健全性检查(CLI)
dotnet restore
dotnet build
# Run benchmarks without MCP (sanity)
dotnet run --project src/SampleBenchmarks/SampleBenchmarks.csproj -c Release -- \
--artifacts runs/manual1 --exporters json,md --job Short --filter *Hash*
# Start the MCP server
dotnet run --project src/Mcp.BenchmarkRunner.Server文物出现在 runs/.
______________________________________________________________________
🧪 MCP检查员(独立)
启动检查器:
npx -y @modelcontextprotocol/inspector
# or:
npm i -g @modelcontextprotocol/inspector
mcp-inspector连接(stdio):
- 命令:
dotnet - Args:
run --project src/Mcp.BenchmarkRunner.Server/Mcp.BenchmarkRunner.Server.csproj
有效载荷示例:
{ "filter": "*Hash*", "job": "Short", "exporters": "json,md" }{ "BaseRunId": "", "HeadRunId": "" }Windows npm ENOENT修复程序\ 如果npx失败与%APPDATA%\npm未找到:\mkdir "%APPDATA%\npm" && npm config set prefix "%APPDATA%\npm"并添加%APPDATA%\npm到PATH。
______________________________________________________________________
🧰 Visual Studio(副驾驶聊天工具)
选项A-- .mcp.json 在 溶液根 (推荐)
{
"servers": {
"benchrunner": {
"name": "Benchmark Runner",
"type": "stdio",
"command": "dotnet",
"args": [
"run",
"--project",
"src/Mcp.BenchmarkRunner.Server/Mcp.BenchmarkRunner.Server.csproj"
]
}
}
}选项B——全局 %USERPROFILE%\.mcp.json (使用绝对路径)
{
"servers": {
"benchrunner": {
"name": "Benchmark Runner",
"type": "stdio",
"command": "dotnet",
"args": [
"run",
"--project",
"C:\\path\\to\\repo\\src\\Mcp.BenchmarkRunner.Server\\Mcp.BenchmarkRunner.Server.csproj"
]
}
}
}使用它: *View → GitHub Copilot 聊天助手* → 工具/代理→ 启用 基准跑者 → run:
run_bench→ grabrunIdget_results/list_artifactscompare_runs有两个runId
日志: *View → 输出→ GitHub Copilot*.
______________________________________________________________________
🧩 工具合同
run_bench
{ "filter": "string?", "job": "Short|Medium|Long", "exporters": "json|fulljson|md|csv", "timeoutSec": 600 }退货: { "runId": "string", "artifactsDir": "path", "summary": { ... } }
get_results
{ "runId": "string" }退货: 解析的JSON导出器对象或 null.
list_artifacts
{ "runId": "string" }退货: 下的文件路径列表 runs/.
compare_runs
{ "BaseRunId": "string", "HeadRunId": "string" }退货: 带有平均值/异基因基/头的行 %Δ.
______________________________________________________________________
🛠 故障排除
restore failed
- 启用 nuget.org 来源;清除缓存:\ dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org\ dotnet nuget locals all --clear - 启用 预发布 (MCP SDK是预览版)或将两个项目切换到 net8.0.
- 基准测试在CLI中有效,但通过MCP失败
- 通常为a 路径问题 从启动时 bin/…. - 向上走 5个级别 从 AppContext.BaseDirectory 到repo根目录 *或* 自动检测根(查找 .sln/src).
dotnet在VS中找不到
- 添加 C:\\Program Files\\dotnet\\ 转到用户PATH并重新启动Visual Studio。
______________________________________________________________________
🗺 路线图
upload_project工具:zip→ 沙盒→ 运行用户基准测试DisassemblyDiagnoser热路径asm转储工具- 发布为
dotnet new模板或NuGet工具 - CI挂钩:立柱
compare_runsPR上的增量
______________________________________________________________________
📎 鸣谢
建造于 Aliaksandr Marozka — amarozka.dev
📄 许可证
麻省理工学院
