Run and re-run .NET Framework vs .NET 10 performance benchmarks, diagnose failures, generate reports with SVG charts
72
66%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Passed
No known issues
Optimize this skill with Tessl
npx tessl skill review --optimize ./.squad/skills/performance-benchmarks/SKILL.mdThe BlazorWebFormsComponents project maintains performance benchmarks comparing the original .NET Framework 4.5.2 Web Forms sample apps (WingtipToys, ContosoUniversity) against their migrated .NET 10 Blazor equivalents. These benchmarks are used to validate that migration delivers measurable performance improvements.
Benchmarks live on the benchmark/424-performance-comparison branch and produce results in dev-docs/benchmarks/.
| Script | Purpose |
|---|---|
scripts/Run-Benchmarks.ps1 | Main orchestrator — launches apps, measures response times, outputs JSON |
scripts/Generate-BenchmarkReport.ps1 | Reads JSON → generates Markdown report + SVG bar charts |
pwsh -File scripts/Run-Benchmarks.ps1 -Iterations 50 -OutputPath dev-docs/benchmarkspwsh -File scripts/Run-Benchmarks.ps1 -SkipFramework -Iterations 50 -OutputPath dev-docs/benchmarkspwsh -File scripts/Run-Benchmarks.ps1 -WhatIfpwsh -File scripts/Generate-BenchmarkReport.ps1 -InputPath dev-docs/benchmarks/benchmark-results.json -OutputPath dev-docs/benchmarks| App | Framework | Port | Launch Method | Status |
|---|---|---|---|---|
| WingtipToys | .NET 4.5.2 | 55502 | IIS Express | ✅ Works — NuGet restore + MSBuild pre-compilation |
| AfterWingtipToys | .NET 10 | 55504 | dotnet run | ✅ Works — fixed @using Microsoft.AspNetCore.Identity |
| ContosoUniversity | .NET 4.5.2 | 55503 | IIS Express | ✅ Works — requires MSBuild pre-compilation, .aspx URLs, and EF6 table rename |
| AfterContosoUniversity | .NET 10 | 55505 | dotnet run | ✅ Works — cold start on Students page (~900ms) due to EF Core DB initialization |
MSBuild pre-compilation: VS 2026 Enterprise MSBuild compiles the DLL. Without this, IIS Express tries to JIT-compile everything on first request and times out. VS 2017 BuildTools lack WebApplication targets — need VS 2019+.
URL paths: ContosoUniversity has no default document at / (returns 403). Pages must be accessed as /Home.aspx, /Students.aspx, /About.aspx. The readiness check now uses the first page URL.
EF6/EF Core table conflict: Both apps share the same LocalDB database. EF6 EDMX expects table dbo.Enrollment (singular), EF Core expects dbo.Enrollments (plural). The script renames the table before/after the Framework benchmark.
Stale IIS Express processes from previous runs can hold benchmark ports open. The script now runs Clear-BenchmarkPorts before starting, killing any process listening on ports 55502-55505.
Per page, per app:
| File | Content |
|---|---|
dev-docs/benchmarks/benchmark-results.json | Raw JSON data — all metrics |
dev-docs/benchmarks/performance-report.md | Markdown report with tables + chart references |
dev-docs/benchmarks/response-times-wingtiptoys.svg | Bar chart: Framework vs Blazor response times |
dev-docs/benchmarks/response-times-contosouniversity.svg | Bar chart: Framework vs Blazor response times |
dotnet --version (should be 10.x)Test-Path "${env:ProgramFiles(x86)}\IIS Express\iisexpress.exe"dotnet build samples\AfterWingtipToys\WingtipToys.csproj and dotnet build samples\AfterContosoUniversity\ContosoUniversity.csprojsqllocaldb info MSSQLLocalDB — both Framework and Blazor apps share this databasesqlcmd -S "(localdb)\MSSQLLocalDB" -d ContosoUniversity -Q "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"The Start-FrameworkApp function performs pre-compilation to avoid JIT timeouts under IIS Express:
MSBuild pre-compilation: Discovers MSBuild.exe (VS 2026 → 2022 → 2019 → 2017 → vswhere) and runs msbuild /p:Configuration=Debug against the .csproj. This compiles code-behind DLLs so IIS Express doesn't JIT on first request. Requires WebApplication targets — VS Enterprise/Professional or Web dev workload.
ASP.NET view pre-compilation: Uses aspnet_compiler.exe -v / -p <sitepath> to pre-compile ASPX views. Falls back gracefully if it fails.
LocalDB auto-start: Runs sqllocaldb start MSSQLLocalDB for EF6 database connectivity.
EF6/EF Core table rename: ContosoUniversity Framework needs dbo.Enrollment (singular per EDMX), but the shared DB has dbo.Enrollments (plural per EF Core). Script renames before/after Framework benchmark.
All three steps are non-fatal — if any tool is missing or fails, the script logs a warning and continues. IIS Express will fall back to on-demand compilation.
After fixing a build error or timeout issue:
Remove-Item dev-docs/benchmarks/benchmark-results.jsonpwsh -File scripts/Run-Benchmarks.ps1 -Iterations 50git add dev-docs/benchmarks/ && git commit -m "perf: Update benchmark results"9bf8669
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.