Ruby VS C# benchmarks

Current benchmark data was generated on Tue Jul 01 2025, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][4 cores] AMD EPYC 7763 64-Core Processor (Model 1)

* -m in a file name stands for multi-threading or multi-processing

* -i in a file name stands for direct intrinsics usage. (Usage of simd intrinsics via libraries is not counted)

* -ffi in a file name stands for non-stdlib FFI usage

* (You may find time < time(user) + time(sys) for some non-parallelized programs, the overhead is from GC or JIT compiler, which are allowed to take advantage of multi-cores as that's more close to real-world scenarios.)

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 987ms 1.3ms 197.6MB 1000ms 140ms dotnet 9.0.301
csharp 1.cs 1008ms 13ms 179.9MB 1017ms 137ms dotnet/aot 9.0.301
csharp 1.cs 1685ms 31ms 103.5MB 1857ms 217ms mono 6.12.0
ruby 1-m.rb 4407ms 191ms 804.1MB 6390ms 450ms truffleruby 24.2.1
ruby 1.rb 4955ms 35ms 109.4MB 4853ms 87ms ruby/yjit 3.4.4
ruby 1.rb timeout 0.0ms 70.5MB 4940ms 40ms ruby 3.4.4

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 122ms 5.7ms 36.6MB 90ms 30ms dotnet/aot 9.0.301
csharp 1.cs 142ms 0.8ms 41.9MB 120ms 13ms mono 6.12.0
csharp 1.cs 203ms 6.4ms 50.0MB 157ms 33ms dotnet 9.0.301
ruby 1.rb 505ms 6.5ms 20.3MB 480ms 10ms ruby/yjit 3.4.4
ruby 1-m.rb 570ms 55ms 424.9MB 1133ms 167ms truffleruby 24.2.1
ruby 1.rb 967ms 21ms 19.5MB 943ms 10ms ruby 3.4.4

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 1446ms 22ms 63.8MB 1363ms 67ms ruby/yjit 3.4.4
ruby 1.rb 1861ms 20ms 63.0MB 1787ms 63ms ruby 3.4.4
csharp 1-m.cs 2289ms 142ms 50.7MB 8040ms 73ms dotnet/aot 9.0.301
csharp 1-m.cs 2934ms 143ms 73.2MB 10080ms 107ms dotnet 9.0.301
ruby 1.rb timeout 0.0ms 327.3MB 4810ms 1417ms truffleruby 24.2.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1-m.cs 150ms 2.1ms 18.5MB 430ms 7ms dotnet/aot 9.0.301
ruby 1.rb 155ms 1.3ms 25.6MB 127ms 17ms ruby/yjit 3.4.4
ruby 1.rb 184ms 1.1ms 25.0MB 157ms 17ms ruby 3.4.4
csharp 1-m.cs 290ms 28ms 40.0MB 830ms 27ms dotnet 9.0.301
ruby 1.rb timeout 0.0ms 351.7MB 4637ms 1527ms truffleruby 24.2.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5-m.cs 137ms 2.4ms 25.0MB 370ms 107ms dotnet/aot 9.0.301
csharp 5-m.cs 190ms 2.4ms 39.6MB 470ms 117ms dotnet 9.0.301
csharp 5-m.cs 227ms 8.2ms 45.5MB 643ms 93ms mono 6.12.0
ruby 6.rb 2079ms 63ms 23.0MB 2053ms 10ms ruby/yjit 3.4.4
ruby 6-m.rb 2218ms 75ms 408.9MB 5653ms 337ms truffleruby 24.2.1
ruby 6.rb 3700ms 18ms 22.4MB 3673ms 10ms ruby 3.4.4

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5-m.cs 25ms 0.9ms 16.0MB 40ms 13ms dotnet/aot 9.0.301
csharp 5-m.cs 67ms 3.3ms 37.1MB 90ms 20ms dotnet 9.0.301
csharp 5-m.cs 71ms 2.0ms 31.3MB 100ms 23ms mono 6.12.0
ruby 6.rb 257ms 1.5ms 15.2MB 240ms 3ms ruby/yjit 3.4.4
ruby 6.rb 420ms 1.2ms 14.4MB 403ms 7ms ruby 3.4.4
ruby 6-m.rb 848ms 18ms 388.9MB 2133ms 180ms truffleruby 24.2.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 6.3ms 0.3ms 8.3MB 0ms 0ms dotnet/aot 9.0.301
csharp 1.cs 32ms 1.0ms 21.2MB 20ms 0ms mono 6.12.0
ruby 1.rb 35ms 1.1ms 141.3MB 16ms 24ms truffleruby 24.2.1
csharp 1.cs 38ms 1.2ms 26.3MB 20ms 4ms dotnet 9.0.301
ruby 1.rb 52ms 0.9ms 12.8MB 40ms 0ms ruby 3.4.4
ruby 1.rb 52ms 1.2ms 12.9MB 40ms 2ms ruby/yjit 3.4.4

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 259ms 6.8ms 28.8MB 233ms 10ms ruby 3.4.4
ruby 1.rb 260ms 1.6ms 30.1MB 230ms 17ms ruby/yjit 3.4.4
csharp 2.cs 315ms 1.5ms 68.7MB 280ms 33ms dotnet 9.0.301
csharp 1.cs 812ms 57ms 143.7MB 833ms 87ms dotnet 9.0.301
ruby 1-m.rb 4473ms 273ms 553.2MB 11820ms 333ms truffleruby 24.2.1

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 1553ms 67ms 233.5MB 1740ms 90ms dotnet 9.0.301
ruby 1.rb 2100ms 16ms 135.4MB 2017ms 73ms ruby 3.4.4
ruby 1.rb 2102ms 15ms 135.2MB 2013ms 73ms ruby/yjit 3.4.4
csharp 1.cs 2799ms 121ms 763.8MB 3280ms 460ms dotnet 9.0.301
ruby 1.rb timeout 0.0ms 507.3MB 13217ms 343ms truffleruby 24.2.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 99ms 0.6ms 9.8MB 90ms 0ms dotnet/aot 9.0.301
csharp 2.cs 147ms 1.2ms 22.9MB 133ms 0ms mono 6.12.0
csharp 2.cs 251ms 1.5ms 29.5MB 233ms 10ms dotnet 9.0.301
ruby 1.rb 342ms 2.8ms 13.5MB 323ms 0ms ruby/yjit 3.4.4
ruby 1.rb 526ms 4.3ms 12.9MB 507ms 3ms ruby 3.4.4
ruby 1-m.rb 707ms 30ms 372.7MB 1240ms 147ms truffleruby 24.2.1
csharp 1.cs 1064ms 15ms 13.0MB 1043ms 3ms dotnet/aot 9.0.301
csharp 1.cs 1315ms 11ms 32.8MB 1303ms 17ms dotnet 9.0.301
csharp 1.cs 3373ms 24ms 45.5MB 3323ms 40ms mono 6.12.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 278ms 1.9ms 9.6MB 267ms 0ms dotnet/aot 9.0.301
csharp 2.cs 363ms 4.6ms 22.7MB 347ms 0ms mono 6.12.0
csharp 2.cs 406ms 2.7ms 29.4MB 390ms 10ms dotnet 9.0.301
ruby 1.rb 913ms 4.6ms 13.5MB 897ms 0ms ruby/yjit 3.4.4
ruby 1-m.rb 1253ms 6.5ms 411.5MB 1750ms 167ms truffleruby 24.2.1
ruby 1.rb 1478ms 32ms 12.9MB 1457ms 7ms ruby 3.4.4
csharp 1.cs 3124ms 12ms 13.5MB 3100ms 13ms dotnet/aot 9.0.301
csharp 1.cs 4086ms 597ms 33.3MB 4063ms 23ms dotnet 9.0.301
csharp 1.cs timeout 0.0ms 45.8MB 4940ms 50ms mono 6.12.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 56ms 2.8ms 10.1MB 40ms 0ms dotnet/aot 9.0.301
csharp 2.cs 94ms 2.2ms 22.8MB 77ms 3ms mono 6.12.0
csharp 2.cs 174ms 3.0ms 29.6MB 150ms 10ms dotnet 9.0.301
ruby 1.rb 198ms 2.3ms 13.5MB 180ms 10ms ruby/yjit 3.4.4
ruby 1.rb 289ms 3.7ms 12.8MB 270ms 7ms ruby 3.4.4
ruby 1-m.rb 530ms 42ms 354.3MB 1040ms 137ms truffleruby 24.2.1
csharp 1.cs 1631ms 16ms 32.4MB 1617ms 17ms dotnet 9.0.301
csharp 1.cs 1825ms 7.4ms 28.6MB 1813ms 0ms mono 6.12.0
csharp 1.cs 1831ms 2.3ms 12.9MB 1813ms 0ms dotnet/aot 9.0.301

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 551ms 10ms 119.2MB 507ms 87ms dotnet/aot 9.0.301
csharp 1.cs 630ms 2.9ms 147.3MB 580ms 127ms dotnet/aot 9.0.301
csharp 2.cs 714ms 12ms 136.7MB 647ms 93ms dotnet 9.0.301
csharp 1.cs 753ms 7.5ms 167.4MB 700ms 133ms dotnet 9.0.301
csharp 1.cs 1373ms 35ms 139.5MB 1567ms 183ms mono 6.12.0
ruby 1-m.rb 4269ms 456ms 556.4MB 10877ms 377ms truffleruby 24.2.1
ruby 1.rb timeout 0.0ms 93.5MB 4947ms 40ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 97.2MB 4933ms 50ms ruby/yjit 3.4.4

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 139ms 5.9ms 57.8MB 110ms 33ms dotnet/aot 9.0.301
csharp 1.cs 163ms 8.0ms 72.7MB 123ms 50ms dotnet/aot 9.0.301
csharp 2.cs 267ms 8.1ms 75.7MB 220ms 40ms dotnet 9.0.301
csharp 1.cs 276ms 1.5ms 89.7MB 243ms 53ms dotnet 9.0.301
csharp 1.cs 277ms 2.7ms 69.5MB 250ms 37ms mono 6.12.0
ruby 1-m.rb 1985ms 41ms 547.4MB 5130ms 257ms truffleruby 24.2.1
ruby 1.rb 3266ms 10ms 38.3MB 3233ms 20ms ruby/yjit 3.4.4
ruby 1.rb 4383ms 23ms 37.6MB 4340ms 27ms ruby 3.4.4

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 9.cs 365ms 5.3ms 27.6MB 343ms 10ms dotnet 9.0.301
csharp 8.cs 373ms 3.5ms 9.8MB 360ms 0ms dotnet/aot 9.0.301
csharp 8.cs 425ms 6.0ms 27.6MB 410ms 7ms dotnet 9.0.301
ruby 2.rb 835ms 11ms 315.3MB 1080ms 117ms truffleruby 24.2.1
csharp 8.cs 1248ms 2.0ms 20.3MB 1230ms 0ms mono 6.12.0
ruby 2.rb timeout 0.0ms 12.8MB 4983ms 3ms ruby 3.4.4
ruby 2.rb timeout 0.0ms 13.5MB 4980ms 7ms ruby/yjit 3.4.4

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 8.cs 46ms 1.5ms 9.9MB 30ms 0ms dotnet/aot 9.0.301
csharp 8.cs 97ms 3.2ms 27.5MB 77ms 7ms dotnet 9.0.301
csharp 9.cs 99ms 5.9ms 27.9MB 73ms 10ms dotnet 9.0.301
csharp 8.cs 168ms 3.1ms 22.4MB 153ms 0ms mono 6.12.0
ruby 2-m.rb 323ms 13ms 309.9MB 563ms 123ms truffleruby 24.2.1
ruby 2.rb 1026ms 2.7ms 13.5MB 1007ms 7ms ruby/yjit 3.4.4
ruby 2.rb 2901ms 120ms 12.8MB 2887ms 0ms ruby 3.4.4

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 361ms 7.5ms 96.3MB 333ms 17ms dotnet 9.0.301
csharp 1.cs 379ms 11ms 78.8MB 360ms 7ms dotnet/aot 9.0.301
csharp 2.cs 399ms 4.3ms 35.7MB 377ms 10ms dotnet 9.0.301
csharp 2.cs 423ms 2.5ms 17.5MB 410ms 0ms dotnet/aot 9.0.301
csharp 1.cs 584ms 14ms 83.9MB 560ms 10ms mono 6.12.0
csharp 2.cs 1886ms 26ms 29.8MB 1870ms 3ms mono 6.12.0
ruby 1.rb timeout 0.0ms 325.3MB 4850ms 137ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 327.0MB 4857ms 130ms ruby/yjit 3.4.4
ruby 1.rb timeout 0.0ms 731.6MB 5057ms 170ms truffleruby 24.2.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 65ms 1.9ms 24.8MB 50ms 0ms dotnet/aot 9.0.301
csharp 1.cs 104ms 4.5ms 42.6MB 80ms 10ms dotnet 9.0.301
csharp 2.cs 110ms 2.4ms 12.1MB 100ms 0ms dotnet/aot 9.0.301
csharp 2.cs 129ms 3.8ms 30.1MB 110ms 7ms dotnet 9.0.301
csharp 1.cs 148ms 0.4ms 36.3MB 130ms 7ms mono 6.12.0
csharp 2.cs 487ms 4.8ms 21.1MB 473ms 0ms mono 6.12.0
ruby 1-m.rb 1708ms 13ms 494.0MB 2480ms 177ms truffleruby 24.2.1
ruby 1.rb 3451ms 53ms 131.8MB 3363ms 73ms ruby/yjit 3.4.4
ruby 1.rb 4587ms 13ms 131.1MB 4493ms 77ms ruby 3.4.4

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 3272ms 12ms 13.9MB 3167ms 100ms dotnet/aot 9.0.301
csharp 1.cs 3667ms 43ms 38.1MB 3650ms 133ms dotnet 9.0.301
ruby 1.rb timeout 0.0ms 46.4MB 4923ms 63ms ruby 3.4.4
ruby 1.rb timeout 0.0ms 130.8MB 4903ms 83ms ruby/yjit 3.4.4
ruby 1.rb timeout 0.0ms 451.3MB 13403ms 393ms truffleruby 24.2.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 767ms 3.0ms 13.5MB 727ms 27ms dotnet/aot 9.0.301
csharp 1.cs 1011ms 7.1ms 37.6MB 1100ms 37ms dotnet 9.0.301
ruby 1-m.rb 1666ms 261ms 414.4MB 4383ms 213ms truffleruby 24.2.1
ruby 1.rb 1783ms 63ms 130.9MB 1673ms 97ms ruby/yjit 3.4.4
ruby 1.rb 1814ms 58ms 130.3MB 1703ms 93ms ruby 3.4.4

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 1871ms 1.6ms 10.5MB 7320ms 3ms dotnet/aot 9.0.301
csharp 3-m.cs 1923ms 1.9ms 30.0MB 7370ms 10ms dotnet 9.0.301
csharp 3-m.cs 4682ms 158ms 27.7MB 17883ms 23ms mono 6.12.0
ruby 4.rb timeout 0.0ms 12.9MB 4980ms 0ms ruby 3.4.4
ruby 4.rb timeout 0.0ms 13.5MB 4983ms 3ms ruby/yjit 3.4.4
ruby 4.rb timeout 0.0ms 449.5MB 5163ms 247ms truffleruby 24.2.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 488ms 17ms 10.5MB 1800ms 0ms dotnet/aot 9.0.301
csharp 3-m.cs 632ms 70ms 29.9MB 1737ms 20ms dotnet 9.0.301
csharp 3-m.cs 1186ms 38ms 25.3MB 4467ms 7ms mono 6.12.0
ruby 4.rb 4909ms 38ms 442.4MB 5200ms 217ms truffleruby 24.2.1
ruby 4.rb timeout 0.0ms 12.9MB 4980ms 0ms ruby 3.4.4
ruby 4.rb timeout 0.0ms 13.5MB 4983ms 3ms ruby/yjit 3.4.4

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 136ms 11ms 10.5MB 447ms 7ms dotnet/aot 9.0.301
csharp 3-m.cs 252ms 16ms 28.8MB 463ms 13ms dotnet 9.0.301
csharp 3-m.cs 345ms 3.8ms 27.6MB 1160ms 10ms mono 6.12.0
ruby 4.rb 1458ms 5.9ms 388.7MB 1803ms 150ms truffleruby 24.2.1
ruby 4.rb timeout 0.0ms 12.9MB 4980ms 0ms ruby 3.4.4
ruby 4.rb timeout 0.0ms 13.6MB 4983ms 0ms ruby/yjit 3.4.4