C# VS Ruby benchmarks

Current benchmark data was generated on Wed May 25 2022, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz (Model 85)

* -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 1595ms 35ms 305.1MB 1500ms 147ms dotnet 6.0.300
csharp 1.cs 2472ms 34ms 107.8MB 2887ms 257ms mono 6.12.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 164ms 1.0ms 44.7MB 137ms 13ms mono 6.12.0
csharp 1.cs 193ms 1.5ms 77.6MB 143ms 23ms dotnet 6.0.300
ruby 1.rb 959ms 4.8ms 35.5MB 927ms 20ms ruby 3.1.2
ruby 1.rb 1007ms 63ms 292.1MB 833ms 157ms ruby/yjit 3.1.2
ruby 1-m.rb 1154ms 16ms 374.0MB 1910ms 153ms truffleruby 22.1.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 3734ms 38ms 336.8MB 3510ms 207ms ruby/yjit 3.1.2
csharp 1-m.cs 4737ms 96ms 89.8MB 8880ms 67ms dotnet 6.0.300
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 274ms 3.5ms 42.3MB 230ms 23ms ruby 3.1.2
csharp 1-m.cs 429ms 21ms 78.6MB 657ms 47ms dotnet 6.0.300
ruby 1.rb 439ms 2.5ms 298.8MB 270ms 150ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs timeout 0.0ms 0.0MB 0ms 0ms dotnet 6.0.300

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 844ms 57ms 47.7MB 803ms 7ms dotnet 6.0.300

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5-m.cs 401ms 20ms 91.1MB 600ms 93ms dotnet 6.0.300
csharp 5-m.cs 528ms 11ms 34.3MB 877ms 113ms mono 6.12.0
ruby 6.rb 2592ms 2.6ms 296.0MB 2430ms 143ms ruby/yjit 3.1.2
ruby 6.rb 4521ms 77ms 39.5MB 4483ms 23ms ruby 3.1.2
ruby 6.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5-m.cs 98ms 9.7ms 34.6MB 113ms 37ms mono 6.12.0
csharp 5.cs 100ms 11ms 40.3MB 77ms 37ms dotnet 6.0.300
ruby 6.rb 520ms 7.9ms 31.2MB 493ms 13ms ruby 3.1.2
ruby 6.rb 534ms 1.0ms 287.7MB 367ms 147ms ruby/yjit 3.1.2
ruby 6-m.rb 1815ms 39ms 324.3MB 3240ms 147ms truffleruby 22.1.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 22ms 0.9ms 25.8MB 10ms 0ms mono 6.12.0
ruby 1.rb 47ms 1.2ms 138.4MB 20ms 30ms truffleruby 22.1.0
csharp 1.cs 52ms 6.4ms 29.0MB 20ms 4ms dotnet 6.0.300
ruby 1.rb 68ms 3.3ms 29.9MB 46ms 8ms ruby 3.1.2
ruby 1.rb 255ms 11ms 286.7MB 106ms 136ms ruby/yjit 3.1.2

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2-http2.cs 665ms 24ms 113.5MB 733ms 93ms dotnet 6.0.300
csharp 2.cs 904ms 35ms 153.5MB 847ms 430ms dotnet 6.0.300
csharp 1-m.cs 937ms 49ms 171.9MB 943ms 470ms dotnet 6.0.300

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 483ms 5.6ms 80.8MB 397ms 110ms dotnet 6.0.300
csharp 1.cs 503ms 19ms 91.9MB 490ms 127ms dotnet 6.0.300
csharp 2-http2.cs 519ms 15ms 83.2MB 510ms 60ms dotnet 6.0.300

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 337ms 24ms 69.7MB 293ms 27ms dotnet 6.0.300
ruby 1.rb 395ms 1.2ms 48.4MB 353ms 27ms ruby 3.1.2
csharp 1.cs 542ms 2.6ms 147.1MB 487ms 73ms dotnet 6.0.300
ruby 1.rb 572ms 1.1ms 305.6MB 413ms 140ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 1989ms 91ms 275.2MB 2103ms 107ms dotnet 6.0.300
csharp 1.cs 3179ms 46ms 799.4MB 3127ms 390ms dotnet 6.0.300
ruby 1.rb 3803ms 283ms 419.3MB 3567ms 220ms ruby/yjit 3.1.2
ruby 1.rb 3923ms 1.6ms 162.5MB 3800ms 103ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 1274ms 7.0ms 77.3MB 1860ms 37ms dotnet 6.0.300
csharp 6-m.cs 1776ms 5.9ms 69.5MB 2940ms 27ms mono 6.12.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 249ms 7.7ms 62.2MB 280ms 27ms dotnet 6.0.300
csharp 6.cs 270ms 6.3ms 55.6MB 357ms 20ms mono 6.12.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 197ms 1.2ms 27.4MB 183ms 0ms mono 6.12.0
csharp 2.cs 210ms 0.9ms 27.7MB 173ms 0ms dotnet 6.0.300
ruby 1.rb 601ms 3.2ms 30.2MB 573ms 13ms ruby 3.1.2
ruby 1.rb 668ms 1.4ms 286.7MB 507ms 147ms ruby/yjit 3.1.2
ruby 1-m.rb 1118ms 34ms 324.3MB 1683ms 130ms truffleruby 22.1.0
csharp 1.cs 1575ms 7.0ms 75.7MB 1540ms 20ms dotnet 6.0.300
csharp 1.cs 3411ms 3.0ms 47.7MB 3360ms 43ms mono 6.12.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 464ms 4.2ms 28.0MB 437ms 7ms dotnet 6.0.300
csharp 2.cs 526ms 3.2ms 26.0MB 510ms 0ms mono 6.12.0
ruby 1.rb 1454ms 1.2ms 286.8MB 1283ms 153ms ruby/yjit 3.1.2
ruby 1.rb 1827ms 148ms 30.2MB 1800ms 10ms ruby 3.1.2
ruby 1-m.rb 1929ms 66ms 366.3MB 2780ms 180ms truffleruby 22.1.0
csharp 1.cs timeout 0.0ms 0.0MB 0ms 0ms dotnet 6.0.300
csharp 1.cs timeout 0.0ms 0.0MB 0ms 0ms mono 6.12.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 112ms 0.8ms 27.2MB 97ms 0ms mono 6.12.0
csharp 2.cs 132ms 3.8ms 25.9MB 97ms 7ms dotnet 6.0.300
ruby 1.rb 334ms 0.5ms 30.0MB 313ms 3ms ruby 3.1.2
ruby 1.rb 419ms 1.1ms 286.8MB 280ms 123ms ruby/yjit 3.1.2
ruby 1-m.rb 801ms 86ms 311.0MB 1277ms 97ms truffleruby 22.1.0
csharp 1.cs 4345ms 104ms 62.0MB 4307ms 27ms dotnet 6.0.300
csharp 1.cs 4416ms 309ms 32.3MB 4393ms 10ms mono 6.12.0

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 668ms 10ms 81.3MB 617ms 30ms dotnet 6.0.300
csharp 1.cs 3440ms 14ms 36.3MB 3410ms 3ms dotnet 6.0.300
csharp 3.cs 3646ms 4.4ms 38.0MB 3613ms 3ms dotnet 6.0.300
csharp 1.cs timeout 0.0ms 0.0MB 0ms 0ms mono 6.12.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 92ms 1.5ms 38.9MB 57ms 10ms dotnet 6.0.300
csharp 3.cs 222ms 4.8ms 33.0MB 187ms 10ms dotnet 6.0.300
csharp 1.cs 318ms 2.1ms 33.2MB 290ms 3ms dotnet 6.0.300
csharp 1.cs 740ms 1.1ms 26.5MB 720ms 3ms mono 6.12.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 1061ms 2.4ms 388.0MB 937ms 167ms dotnet 6.0.300
csharp 1.cs 1098ms 27ms 305.2MB 957ms 170ms dotnet 6.0.300
csharp 1.cs 1920ms 11ms 147.1MB 2480ms 123ms mono 6.12.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 308ms 5.3ms 135.0MB 213ms 70ms dotnet 6.0.300
csharp 1.cs 323ms 1.1ms 164.5MB 227ms 80ms dotnet 6.0.300
csharp 1.cs 346ms 0.7ms 74.4MB 317ms 47ms mono 6.12.0
ruby 1-m.rb 3899ms 12ms 522.4MB 7130ms 253ms truffleruby 22.1.0
ruby 1.rb 3919ms 269ms 300.9MB 3750ms 147ms ruby/yjit 3.1.2
ruby 1.rb 4824ms 19ms 44.4MB 4790ms 17ms ruby 3.1.2

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 9.cs 443ms 4.3ms 31.2MB 410ms 3ms dotnet 6.0.300
csharp 8.cs 618ms 8.4ms 27.2MB 583ms 7ms dotnet 6.0.300
csharp 8.cs 1298ms 29ms 25.0MB 1280ms 0ms mono 6.12.0
ruby 2.rb 1453ms 19ms 300.6MB 1823ms 127ms truffleruby 22.1.0
ruby 2.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 2.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 9.cs 96ms 3.5ms 27.2MB 60ms 0ms dotnet 6.0.300
csharp 8.cs 112ms 7.1ms 29.1MB 83ms 0ms dotnet 6.0.300
csharp 8.cs 147ms 9.2ms 25.0MB 133ms 0ms mono 6.12.0
ruby 2-m.rb 547ms 17ms 293.9MB 873ms 107ms truffleruby 22.1.0
ruby 2.rb 2300ms 157ms 286.8MB 2147ms 137ms ruby/yjit 3.1.2
ruby 2.rb 2985ms 224ms 30.0MB 2960ms 10ms ruby 3.1.2

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 1007ms 64ms 42.1MB 973ms 3ms dotnet 6.0.300
csharp 1.cs 1293ms 32ms 96.5MB 1240ms 27ms dotnet 6.0.300
csharp 1.cs 1450ms 53ms 86.6MB 1417ms 20ms mono 6.12.0
csharp 2.cs 2628ms 182ms 32.4MB 2617ms 0ms mono 6.12.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 183ms 2.0ms 48.7MB 143ms 13ms dotnet 6.0.300
csharp 1.cs 199ms 1.6ms 42.6MB 180ms 3ms mono 6.12.0
csharp 2.cs 310ms 2.5ms 31.6MB 270ms 10ms dotnet 6.0.300
csharp 2.cs 612ms 0.3ms 26.1MB 600ms 0ms mono 6.12.0
ruby 1.rb 4255ms 11ms 450.1MB 4693ms 197ms truffleruby 22.1.0
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs timeout 0.0ms 0.0MB 0ms 0ms dotnet 6.0.300
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 1.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 1348ms 3.0ms 79.6MB 1333ms 43ms dotnet 6.0.300
ruby 1-m.rb 2398ms 14ms 380.8MB 4403ms 170ms truffleruby 22.1.0
ruby 1.rb 2920ms 118ms 162.8MB 2817ms 83ms ruby 3.1.2
ruby 1.rb 3138ms 10ms 420.7MB 2910ms 213ms ruby/yjit 3.1.2

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5.cs 2913ms 188ms 589.8MB 2837ms 267ms dotnet 7.0.100
csharp 5p.cs 3745ms 33ms 591.6MB 3603ms 257ms dotnet 7.0.100
csharp 5.cs 3954ms 237ms 522.8MB 3853ms 243ms dotnet 6.0.300

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5.cs 455ms 7.3ms 168.0MB 390ms 50ms dotnet 7.0.100
csharp 5p.cs 494ms 19ms 162.0MB 423ms 53ms dotnet 7.0.100
csharp 5.cs 537ms 6.2ms 89.3MB 483ms 43ms dotnet 6.0.300

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 4641ms 242ms 79.1MB 4623ms 33ms dotnet 6.0.300

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 1157ms 36ms 75.0MB 1140ms 23ms dotnet 6.0.300

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 2478ms 3.8ms 29.7MB 4743ms 17ms dotnet 6.0.300
csharp 3.cs timeout 0.0ms 0.0MB 0ms 0ms mono 6.12.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 686ms 0.7ms 30.1MB 1230ms 10ms dotnet 6.0.300
csharp 3-m.cs 2554ms 15ms 27.7MB 4747ms 3ms mono 6.12.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms truffleruby 22.1.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 227ms 5.2ms 27.3MB 337ms 7ms dotnet 6.0.300
csharp 3-m.cs 662ms 0.1ms 29.7MB 1207ms 0ms mono 6.12.0
ruby 4.rb 2702ms 3.9ms 365.9MB 3373ms 150ms truffleruby 22.1.0
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby 3.1.2
ruby 4.rb timeout 0.0ms 0.0MB 0ms 0ms ruby/yjit 3.1.2