使用说明
麦克。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/<runId or manual1>.
🧪 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": "<first>", "HeadRunId": "<second>" }
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/<runId>.
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).
- 通常为a 路径问题 从启动时
dotnet在VS中找不到- 添加
C:\\Program Files\\dotnet\\转到用户PATH并重新启动Visual Studio。
- 添加
🗺 路线图
upload_project工具:zip→ 沙盒→ 运行用户基准测试DisassemblyDiagnoser热路径asm转储工具- 发布为
dotnet new模板或NuGet工具 - CI挂钩:立柱
compare_runsPR上的增量
📎 鸣谢
建造于 Aliaksandr Marozka — amarozka.dev
📄 许可证
麻省理工学院
