Ruby VS C# benchmarks

Current benchmark data was generated on Wed Feb 08 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8171M 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 1718ms 34ms 303.4MB 1583ms 217ms dotnet/aot 7.0.102
csharp 1.cs 1977ms 81ms 433.3MB 1717ms 333ms dotnet 7.0.102
csharp 1.cs 2754ms 23ms 106.2MB 3340ms 227ms mono 6.12.0
ruby 1.rb timeout 0.0ms 72.6MB 4940ms 40ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 82.1MB 4923ms 57ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 471.3MB 8477ms 293ms truffleruby 22.3.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 173ms 7.2ms 60.2MB 137ms 30ms dotnet/aot 7.0.102
csharp 1.cs 190ms 1.8ms 46.1MB 167ms 13ms mono 6.12.0
csharp 1.cs 345ms 16ms 151.8MB 240ms 73ms dotnet 7.0.102
ruby 1.rb 718ms 9.3ms 40.7MB 673ms 30ms ruby/yjit 3.2.0
ruby 1.rb 1269ms 18ms 40.3MB 1233ms 20ms ruby 3.2.0
ruby 1-m.rb 1341ms 27ms 400.1MB 2230ms 170ms truffleruby 22.3.1

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 4296ms 59ms 82.8MB 4203ms 77ms ruby/yjit 3.2.0
csharp 1.cs timeout 0.0ms 159.0MB 9133ms 113ms dotnet 7.0.102
csharp 1.cs timeout 0.0ms 65.9MB 9127ms 70ms dotnet/aot 7.0.102
ruby 1.rb timeout 0.0ms 81.5MB 4900ms 73ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 1103.9MB 4400ms 1323ms truffleruby 22.3.1

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ruby 1.rb 292ms 1.0ms 44.9MB 247ms 33ms ruby/yjit 3.2.0
ruby 1.rb 341ms 17ms 44.5MB 290ms 33ms ruby 3.2.0
csharp 1-m.cs 374ms 8.9ms 54.9MB 623ms 27ms dotnet/aot 7.0.102
csharp 1-m.cs 729ms 80ms 145.2MB 1137ms 70ms dotnet 7.0.102
ruby 1.rb timeout 0.0ms 1096.9MB 4293ms 1420ms truffleruby 22.3.1

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5-m.cs 372ms 28ms 67.2MB 583ms 107ms dotnet/aot 7.0.102
csharp 5-m.cs 590ms 61ms 156.5MB 887ms 137ms dotnet 7.0.102
csharp 5-m.cs 645ms 15ms 60.3MB 1077ms 137ms mono 6.12.0
ruby 6.rb 2828ms 11ms 43.6MB 2787ms 27ms ruby/yjit 3.2.0
ruby 6-m.rb 3219ms 20ms 392.0MB 5753ms 340ms truffleruby 22.3.1
ruby 6.rb timeout 0.0ms 42.9MB 4957ms 23ms ruby 3.2.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5.cs 73ms 29ms 24.4MB 77ms 27ms dotnet/aot 7.0.102
csharp 5.cs 107ms 3.8ms 34.1MB 137ms 23ms mono 6.12.0
csharp 5.cs 163ms 6.8ms 111.5MB 130ms 70ms dotnet 7.0.102
ruby 6.rb 368ms 4.1ms 35.0MB 337ms 17ms ruby/yjit 3.2.0
ruby 6.rb 594ms 3.7ms 34.4MB 557ms 17ms ruby 3.2.0
ruby 6-m.rb 1035ms 11ms 324.2MB 1757ms 143ms truffleruby 22.3.1

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 8.0ms 0.9ms 10.1MB 0ms 0ms dotnet/aot 7.0.102
csharp 1.cs 24ms 1.3ms 23.6MB 10ms 2ms mono 6.12.0
ruby 1.rb 54ms 1.8ms 153.4MB 30ms 28ms truffleruby 22.3.1
ruby 1.rb 87ms 1.1ms 32.1MB 52ms 18ms ruby 3.2.0
csharp 1.cs 91ms 4.1ms 101.5MB 30ms 32ms dotnet 7.0.102
ruby 1.rb 91ms 4.1ms 32.3MB 64ms 14ms ruby/yjit 3.2.0

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 502ms 7.6ms 145.0MB 407ms 60ms dotnet 7.0.102
ruby 1.rb 536ms 9.1ms 52.0MB 493ms 27ms ruby/yjit 3.2.0
ruby 1.rb 539ms 2.7ms 54.3MB 493ms 27ms ruby 3.2.0
csharp 1.cs 807ms 5.6ms 217.9MB 770ms 117ms dotnet 7.0.102
ruby 1.rb timeout 0.0ms 429.6MB 9103ms 237ms truffleruby 22.3.1

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 2278ms 139ms 342.6MB 2337ms 183ms dotnet 7.0.102
csharp 1.cs 3460ms 49ms 859.9MB 3380ms 483ms dotnet 7.0.102
ruby 1.rb 4869ms 23ms 174.3MB 4730ms 123ms ruby/yjit 3.2.0
ruby 1.rb 4894ms 50ms 175.2MB 4767ms 110ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 404.1MB 9173ms 250ms truffleruby 22.3.1

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 165ms 1.5ms 10.2MB 160ms 0ms dotnet/aot 7.0.102
csharp 2.cs 247ms 7.9ms 27.3MB 227ms 3ms mono 6.12.0
csharp 2.cs 272ms 2.4ms 102.2MB 213ms 27ms dotnet 7.0.102
ruby 1.rb 547ms 7.6ms 33.0MB 513ms 20ms ruby/yjit 3.2.0
ruby 1.rb 783ms 2.8ms 32.4MB 753ms 13ms ruby 3.2.0
ruby 1-m.rb 991ms 25ms 326.0MB 1430ms 137ms truffleruby 22.3.1
csharp 1.cs 1879ms 12ms 56.1MB 1850ms 27ms dotnet/aot 7.0.102
csharp 1.cs 2048ms 2.1ms 145.7MB 1967ms 67ms dotnet 7.0.102
csharp 1.cs 4010ms 16ms 47.7MB 3953ms 50ms mono 6.12.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 492ms 13ms 10.1MB 483ms 0ms dotnet/aot 7.0.102
csharp 2.cs 535ms 11ms 101.9MB 483ms 30ms dotnet 7.0.102
csharp 2.cs 634ms 5.8ms 25.3MB 617ms 3ms mono 6.12.0
ruby 1.rb 1475ms 1.9ms 33.0MB 1447ms 13ms ruby/yjit 3.2.0
ruby 1.rb 1943ms 72ms 333.2MB 2463ms 183ms truffleruby 22.3.1
ruby 1.rb 2117ms 13ms 32.4MB 2083ms 17ms ruby 3.2.0
csharp 1.cs timeout 0.0ms 146.6MB 4930ms 57ms dotnet 7.0.102
csharp 1.cs timeout 0.0ms 56.4MB 4970ms 23ms dotnet/aot 7.0.102
csharp 1.cs timeout 0.0ms 47.9MB 4960ms 33ms mono 6.12.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 85ms 0.6ms 8.1MB 80ms 0ms dotnet/aot 7.0.102
csharp 2.cs 132ms 0.6ms 25.3MB 120ms 0ms mono 6.12.0
csharp 2.cs 190ms 5.7ms 102.2MB 127ms 30ms dotnet 7.0.102
ruby 1.rb 319ms 2.1ms 32.8MB 290ms 13ms ruby/yjit 3.2.0
ruby 1.rb 426ms 2.6ms 32.3MB 397ms 10ms ruby 3.2.0
ruby 1-m.rb 739ms 68ms 311.2MB 1117ms 130ms truffleruby 22.3.1
csharp 1.cs timeout 0.0ms 137.6MB 4907ms 57ms dotnet 7.0.102
csharp 1.cs timeout 0.0ms 51.2MB 4953ms 40ms dotnet/aot 7.0.102
csharp 1.cs timeout 0.0ms 29.4MB 4967ms 0ms mono 6.12.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 1053ms 5.7ms 382.4MB 917ms 193ms dotnet/aot 7.0.102
csharp 1.cs 1147ms 32ms 303.2MB 1003ms 183ms dotnet/aot 7.0.102
csharp 2.cs 1283ms 16ms 497.2MB 1037ms 270ms dotnet 7.0.102
csharp 1.cs 1342ms 22ms 501.9MB 1127ms 263ms dotnet 7.0.102
csharp 1.cs 2174ms 53ms 142.9MB 2760ms 160ms mono 6.12.0
ruby 1.rb timeout 0.0ms 96.5MB 4910ms 73ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 97.0MB 4913ms 70ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 511.3MB 9013ms 283ms truffleruby 22.3.1

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 249ms 14ms 141.6MB 183ms 60ms dotnet/aot 7.0.102
csharp 1.cs 308ms 9.8ms 190.9MB 203ms 93ms dotnet/aot 7.0.102
csharp 1.cs 399ms 3.3ms 72.0MB 393ms 33ms mono 6.12.0
csharp 1.cs 444ms 10ms 249.0MB 327ms 103ms dotnet 7.0.102
csharp 2.cs 463ms 4.4ms 208.9MB 367ms 77ms dotnet 7.0.102
ruby 1-m.rb 4229ms 57ms 589.3MB 7687ms 320ms truffleruby 22.3.1
ruby 1.rb 4784ms 22ms 53.7MB 4710ms 57ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 52.8MB 4943ms 37ms ruby 3.2.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 9.cs 531ms 2.8ms 98.0MB 463ms 33ms dotnet 7.0.102
csharp 8.cs 686ms 14ms 12.3MB 680ms 0ms dotnet/aot 7.0.102
csharp 8.cs 742ms 6.0ms 99.9MB 673ms 37ms dotnet 7.0.102
ruby 2.rb 1435ms 12ms 298.5MB 1713ms 100ms truffleruby 22.3.1
csharp 8.cs 1535ms 1.6ms 25.0MB 1513ms 3ms mono 6.12.0
ruby 2.rb timeout 0.0ms 32.2MB 4970ms 13ms ruby 3.2.0
ruby 2.rb timeout 0.0ms 33.0MB 4963ms 13ms ruby/yjit 3.2.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 8.cs 78ms 3.2ms 10.0MB 73ms 0ms dotnet/aot 7.0.102
csharp 9.cs 144ms 2.8ms 98.4MB 83ms 33ms dotnet 7.0.102
csharp 8.cs 172ms 6.9ms 102.3MB 117ms 27ms dotnet 7.0.102
csharp 8.cs 181ms 0.8ms 25.0MB 157ms 3ms mono 6.12.0
ruby 2-m.rb 513ms 25ms 309.9MB 770ms 127ms truffleruby 22.3.1
ruby 2.rb 2528ms 32ms 33.1MB 2487ms 23ms ruby/yjit 3.2.0
ruby 2.rb 4072ms 73ms 32.2MB 4043ms 13ms ruby 3.2.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 758ms 4.2ms 17.9MB 753ms 0ms dotnet/aot 7.0.102
csharp 2.cs 923ms 3.8ms 109.3MB 860ms 37ms dotnet 7.0.102
csharp 1.cs 1090ms 39ms 71.9MB 1063ms 20ms dotnet/aot 7.0.102
csharp 1.cs 1355ms 47ms 82.5MB 1317ms 23ms mono 6.12.0
csharp 1.cs 1931ms 106ms 158.9MB 1843ms 53ms dotnet 7.0.102
csharp 2.cs 3286ms 22ms 31.9MB 3267ms 7ms mono 6.12.0
ruby 1.rb timeout 0.0ms 344.6MB 4780ms 197ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 344.9MB 4787ms 190ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 682.1MB 5030ms 217ms truffleruby 22.3.1

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 174ms 11ms 30.5MB 153ms 13ms dotnet/aot 7.0.102
csharp 2.cs 189ms 9.5ms 11.4MB 173ms 0ms dotnet/aot 7.0.102
csharp 1.cs 225ms 4.3ms 40.6MB 200ms 7ms mono 6.12.0
csharp 2.cs 290ms 2.2ms 104.8MB 233ms 23ms dotnet 7.0.102
csharp 1.cs 405ms 14ms 114.9MB 337ms 33ms dotnet 7.0.102
csharp 2.cs 805ms 2.3ms 26.1MB 787ms 3ms mono 6.12.0
ruby 1.rb 3780ms 6.1ms 431.4MB 4390ms 167ms truffleruby 22.3.1
ruby 1.rb timeout 0.0ms 151.0MB 4900ms 77ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 151.5MB 4893ms 90ms ruby/yjit 3.2.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs timeout 0.0ms 155.9MB 4923ms 147ms dotnet 7.0.102
csharp 1.cs timeout 0.0ms 57.3MB 4960ms 33ms dotnet/aot 7.0.102
ruby 1.rb timeout 0.0ms 159.1MB 4913ms 67ms ruby 3.2.0
ruby 1.rb timeout 0.0ms 159.8MB 4903ms 73ms ruby/yjit 3.2.0
ruby 1.rb timeout 0.0ms 430.8MB 9380ms 223ms truffleruby 22.3.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 1333ms 7.2ms 56.5MB 1290ms 33ms dotnet/aot 7.0.102
csharp 1.cs 1458ms 0.2ms 156.3MB 1413ms 90ms dotnet 7.0.102
ruby 1-m.rb 2551ms 7.6ms 419.5MB 4673ms 190ms truffleruby 22.3.1
ruby 1.rb 3739ms 3.7ms 158.8MB 3630ms 87ms ruby/yjit 3.2.0
ruby 1.rb 3746ms 14ms 158.0MB 3647ms 80ms ruby 3.2.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 2549ms 81ms 13.6MB 4870ms 13ms dotnet/aot 7.0.102
csharp 3-m.cs 4653ms 9.5ms 106.8MB 8870ms 43ms dotnet 7.0.102
csharp 3.cs timeout 0.0ms 27.1MB 9733ms 10ms mono 6.12.0
ruby 4.rb timeout 0.0ms 32.2MB 4967ms 10ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.9MB 4973ms 13ms ruby/yjit 3.2.0
ruby 4.rb timeout 0.0ms 404.5MB 5227ms 213ms truffleruby 22.3.1

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 649ms 1.7ms 12.2MB 1230ms 0ms dotnet/aot 7.0.102
csharp 3-m.cs 1335ms 16ms 104.6MB 2427ms 30ms dotnet 7.0.102
csharp 3-m.cs 3239ms 166ms 29.5MB 6070ms 7ms mono 6.12.0
ruby 4.rb timeout 0.0ms 32.2MB 4970ms 17ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.8MB 4957ms 20ms ruby/yjit 3.2.0
ruby 4.rb timeout 0.0ms 460.5MB 5583ms 183ms truffleruby 22.3.1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 186ms 7.1ms 12.2MB 320ms 3ms dotnet/aot 7.0.102
csharp 3-m.cs 440ms 7.6ms 104.3MB 670ms 33ms dotnet 7.0.102
csharp 3-m.cs 820ms 6.1ms 29.6MB 1540ms 0ms mono 6.12.0
ruby 4.rb 3275ms 18ms 360.5MB 3963ms 167ms truffleruby 22.3.1
ruby 4.rb timeout 0.0ms 32.0MB 4960ms 23ms ruby 3.2.0
ruby 4.rb timeout 0.0ms 32.9MB 4967ms 10ms ruby/yjit 3.2.0