Skip to content
ConsoleMonster

Benchmarks

What a ConsoleMonster frame costs, measured by the repository's own benchmark program and stress test. Every number on this page comes from their output.

ConsoleMonster.Benchmarks, as a table 73×1024-bitFull
 ConsoleMonster.Benchmarks 140×45, 32 lanes, 5,000 updates between frames
╭──────────────────────────────┬───────────┬──────────────────────────╮
│ Measure                      │    Result │ Share of a 66.7 ms frame │
├──────────────────────────────┼───────────┼──────────────────────────┤
│ Compose a frame              │  0.680 ms │ ▆                0.68 ms │
│ Diff and encode VT           │  0.125 ms │ ▆                0.13 ms │
│ Characters written per frame │     3,312 │                          │
│ Allocated per frame          │ 206,593 B │                          │
│ Events applied per second    │ 9,949,665 │                          │
╰──────────────────────────────┴───────────┴──────────────────────────╯

The cost of a frame

ConsoleMonster.Benchmarks builds a stress-sized dashboard (32 lanes, statistics, a sparkline and a log) at 140×45, applies 5,000 updates between frames and measures 600 frames: composing the frame, diffing it against the previous one and encoding VT, the characters written and the memory allocated. A live session does this work on one thread about 15 times a second.

Compose plus diff and VT, per frame
0.805 ms
Render CPU at 15 fps
1.2% of a core
Events applied per second
9.9 million
Characters per diffed frame
3,312

Measured for this site on AMD Ryzen 9 9950X3D2 16-Core Processor (32 logical processors), Microsoft Windows 10.0.26300, .NET 8.0.32, on 2026-10-17. Results vary with the machine; rerun the program to measure yours.

ConsoleMonster.Benchmarks 600 .NET 8.0.32Release build
ConsoleMonster benchmark (.NET 8.0.32, 140x45, 32 lanes)
  event apply:        9,949,665 events/s on one thread
  compose per frame:  0.680 ms
  diff+VT per frame:  0.125 ms
  chars per frame:    3,312 (diffed, 5,000 updates between frames)
  alloc per frame:    206,593 bytes
  render CPU at 15 fps: 1.2% of one core (+ apply cost 0.8% at 80k updates/s)

Under load: the stress test

The stress showcase in ConsoleMonster.Examples measures a whole live session: 32 worker threads posting lane updates, four threads writing stray console output, and the session drawing frames. These are the figures it printed at the end of the run recorded for the live dashboards page.

Updates posted in 12.8 s
1,010,136
Average update rate
79,056/s
Frames drawn
192 (15.0 fps)
Dropped updates and errors
0 / 0
CPU, share of one core
14.8%

Watch the recorded run.

Reported in the repository

Figures stated in the ConsoleMonster 2.0 pull request and the README, measured by the maintainers on their machines.

MeasureReportedSource
Frame rate during the stress test15.0 fps sustainedPull request #11
Updates during the stress testabout 80,000 per second, 0 droppedPull request #11
Time per frame during the stress testabout 0.75 msPull request #11
Printing 50,000 rows at 140 columnsabout 1.7 sREADME
Peak memory for those 50,000 rowsabout 76 MB above the starting point (510 MB before block printing)README

Run them yourself

dotnet run --project ConsoleMonster.Benchmarks -c Release -- 600
dotnet run --project ConsoleMonster.Examples -c Release -f net8.0 -- stress 20
dotnet run --project ConsoleMonster.Examples -c Release -f net8.0 -- large-table 50000

The first prints the per-frame figures above. The stress test opens a live dashboard and prints one STRESS line with the session's counters when it ends. large-table measures printing a long table in blocks.