OCaml VS C# benchmarks

Current benchmark data was generated on Mon Jun 23 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 934ms 5.4ms 205.2MB 963ms 147ms dotnet 9.0.301
csharp 1.cs 978ms 18ms 174.5MB 967ms 137ms dotnet/aot 9.0.301
csharp 1.cs 1709ms 47ms 103.2MB 1913ms 217ms mono 6.12.0
ocaml 1.ml 3028ms 44ms 157.2MB 2940ms 73ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 115ms 6.0ms 32.3MB 83ms 27ms dotnet/aot 9.0.301
csharp 1.cs 144ms 2.8ms 44.3MB 120ms 13ms mono 6.12.0
csharp 1.cs 202ms 8.2ms 50.2MB 153ms 37ms dotnet 9.0.301
ocaml 1.ml 214ms 0.9ms 19.1MB 200ms 0ms ocaml 5.3.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 2914ms 16ms 4.9MB 2907ms 0ms ocaml 5.3.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 245ms 3.3ms 4.9MB 237ms 0ms ocaml 5.3.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5-m.cs 130ms 8.6ms 26.5MB 370ms 90ms dotnet/aot 9.0.301
csharp 5-m.cs 191ms 3.5ms 38.5MB 467ms 127ms dotnet 9.0.301
csharp 5-m.cs 230ms 6.7ms 48.8MB 660ms 90ms mono 6.12.0
ocaml 6.ml 347ms 1.7ms 24.8MB 337ms 0ms ocaml 5.3.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5-m.cs 25ms 0.6ms 15.4MB 37ms 13ms dotnet/aot 9.0.301
ocaml 6.ml 39ms 0.5ms 7.5MB 30ms 0ms ocaml 5.3.0
csharp 5-m.cs 65ms 6.7ms 37.0MB 87ms 13ms dotnet 9.0.301
csharp 5-m.cs 71ms 1.6ms 30.0MB 97ms 27ms mono 6.12.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 1.8ms 0.2ms 5.0MB 0ms 0ms ocaml 5.3.0
csharp 1.cs 7.3ms 1.8ms 8.3MB 0ms 0ms dotnet/aot 9.0.301
csharp 1.cs 32ms 0.6ms 21.3MB 20ms 0ms mono 6.12.0
csharp 1.cs 35ms 1.3ms 26.1MB 20ms 4ms dotnet 9.0.301

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 99ms 0.9ms 9.9MB 87ms 0ms dotnet/aot 9.0.301
csharp 2.cs 150ms 3.3ms 21.1MB 137ms 0ms mono 6.12.0
ocaml 1.ml 190ms 0.6ms 6.4MB 180ms 0ms ocaml 5.3.0
csharp 2.cs 256ms 3.5ms 29.1MB 240ms 7ms dotnet 9.0.301
csharp 1.cs 1041ms 13ms 13.1MB 1027ms 0ms dotnet/aot 9.0.301
csharp 1.cs 1312ms 12ms 32.9MB 1300ms 13ms dotnet 9.0.301
csharp 1.cs 3351ms 22ms 43.7MB 3303ms 37ms mono 6.12.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 279ms 1.8ms 9.8MB 267ms 0ms dotnet/aot 9.0.301
csharp 2.cs 362ms 8.0ms 22.8MB 347ms 0ms mono 6.12.0
csharp 2.cs 400ms 2.8ms 29.5MB 387ms 7ms dotnet 9.0.301
ocaml 1.ml 518ms 3.2ms 6.6MB 510ms 0ms ocaml 5.3.0
csharp 1.cs 3081ms 17ms 13.3MB 3057ms 13ms dotnet/aot 9.0.301
csharp 1.cs 3721ms 174ms 32.6MB 3687ms 20ms dotnet 9.0.301
csharp 1.cs timeout 0.0ms 45.6MB 4943ms 47ms mono 6.12.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 54ms 0.2ms 9.8MB 40ms 0ms dotnet/aot 9.0.301
ocaml 1.ml 77ms 1.4ms 5.9MB 70ms 0ms ocaml 5.3.0
csharp 2.cs 94ms 2.6ms 22.9MB 80ms 0ms mono 6.12.0
csharp 2.cs 166ms 3.1ms 29.3MB 143ms 7ms dotnet 9.0.301
csharp 1.cs 1617ms 4.4ms 32.5MB 1613ms 7ms dotnet 9.0.301
csharp 1.cs 1819ms 13ms 28.6MB 1800ms 0ms mono 6.12.0
csharp 1.cs 1833ms 5.6ms 13.0MB 1817ms 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 529ms 15ms 121.1MB 490ms 90ms dotnet/aot 9.0.301
csharp 1.cs 591ms 6.0ms 143.1MB 560ms 107ms dotnet/aot 9.0.301
csharp 2.cs 689ms 3.3ms 136.1MB 640ms 97ms dotnet 9.0.301
csharp 1.cs 796ms 22ms 168.8MB 747ms 127ms dotnet 9.0.301
ocaml 1.ml 1094ms 11ms 70.2MB 1047ms 30ms ocaml 5.3.0
csharp 1.cs 1276ms 14ms 140.6MB 1483ms 157ms mono 6.12.0
ocaml 2.ml 2066ms 16ms 91.8MB 2013ms 33ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 129ms 4.6ms 57.3MB 103ms 30ms dotnet/aot 9.0.301
ocaml 1.ml 147ms 4.1ms 21.7MB 130ms 7ms ocaml 5.3.0
csharp 1.cs 161ms 5.6ms 74.5MB 120ms 53ms dotnet/aot 9.0.301
csharp 1.cs 265ms 3.3ms 69.4MB 240ms 30ms mono 6.12.0
csharp 2.cs 272ms 4.1ms 75.6MB 230ms 47ms dotnet 9.0.301
csharp 1.cs 287ms 3.4ms 89.4MB 250ms 63ms dotnet 9.0.301
ocaml 2.ml 367ms 7.6ms 27.7MB 343ms 7ms ocaml 5.3.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 9.cs 363ms 6.1ms 27.9MB 340ms 10ms dotnet 9.0.301
csharp 8.cs 371ms 2.5ms 9.9MB 360ms 0ms dotnet/aot 9.0.301
ocaml 1.ml 373ms 1.9ms 5.2MB 360ms 0ms ocaml 5.3.0
csharp 8.cs 431ms 6.0ms 27.8MB 413ms 10ms dotnet 9.0.301
csharp 8.cs 1252ms 0.3ms 22.4MB 1240ms 0ms mono 6.12.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 41ms 1.4ms 5.2MB 30ms 0ms ocaml 5.3.0
csharp 8.cs 44ms 0.0ms 9.9MB 30ms 0ms dotnet/aot 9.0.301
csharp 8.cs 96ms 0.6ms 27.8MB 77ms 10ms dotnet 9.0.301
csharp 9.cs 111ms 17ms 27.9MB 87ms 7ms dotnet 9.0.301
csharp 8.cs 166ms 2.0ms 20.8MB 150ms 0ms mono 6.12.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 320ms 4.3ms 78.8MB 300ms 3ms dotnet/aot 9.0.301
csharp 1.cs 365ms 4.2ms 96.4MB 340ms 13ms dotnet 9.0.301
csharp 2.cs 401ms 4.4ms 35.8MB 373ms 10ms dotnet 9.0.301
csharp 2.cs 426ms 3.0ms 17.4MB 413ms 0ms dotnet/aot 9.0.301
csharp 1.cs 556ms 2.5ms 81.9MB 533ms 10ms mono 6.12.0
ocaml 1.ml 957ms 3.4ms 550.3MB 900ms 43ms ocaml 5.3.0
csharp 2.cs 1875ms 14ms 29.4MB 1860ms 0ms mono 6.12.0
ocaml 2.ml 1886ms 14ms 18.9MB 1873ms 0ms ocaml 5.3.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 64ms 1.3ms 24.7MB 50ms 0ms dotnet/aot 9.0.301
csharp 1.cs 106ms 3.2ms 42.6MB 83ms 10ms dotnet 9.0.301
csharp 2.cs 109ms 1.6ms 11.9MB 93ms 0ms dotnet/aot 9.0.301
csharp 2.cs 130ms 1.1ms 30.3MB 110ms 10ms dotnet 9.0.301
csharp 1.cs 146ms 1.6ms 38.5MB 130ms 10ms mono 6.12.0
ocaml 1.ml 191ms 3.0ms 141.6MB 170ms 10ms ocaml 5.3.0
ocaml 2.ml 471ms 4.3ms 9.1MB 460ms 0ms ocaml 5.3.0
csharp 2.cs 495ms 15ms 23.5MB 483ms 0ms mono 6.12.0

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 1755ms 15ms 416.8MB 1657ms 150ms dotnet/aot 9.0.301
csharp 5.cs 2076ms 16ms 442.5MB 2107ms 190ms dotnet 9.0.301
csharp 6.cs 2722ms 41ms 440.1MB 2663ms 180ms dotnet 9.0.301
csharp 5.cs 4214ms 16ms 420.0MB 4110ms 153ms dotnet/aot 9.0.301
ocaml 2.ml timeout 0.0ms 462.9MB 4830ms 153ms ocaml 5.3.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 191ms 2.0ms 47.1MB 167ms 13ms dotnet/aot 9.0.301
csharp 5.cs 294ms 10ms 72.8MB 260ms 30ms dotnet 9.0.301
csharp 6.cs 398ms 3.2ms 70.3MB 357ms 30ms dotnet 9.0.301
csharp 5.cs 434ms 1.9ms 48.7MB 407ms 17ms dotnet/aot 9.0.301
ocaml 2.ml 549ms 4.5ms 57.1MB 513ms 23ms ocaml 5.3.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 1888ms 32ms 10.5MB 7287ms 7ms dotnet/aot 9.0.301
csharp 3-m.cs 1932ms 11ms 30.1MB 7360ms 17ms dotnet 9.0.301
ocaml 2.ml 4582ms 24ms 6.4MB 4570ms 0ms ocaml 5.3.0
csharp 3-m.cs 4684ms 65ms 27.0MB 17910ms 10ms mono 6.12.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 477ms 1.2ms 10.1MB 1823ms 7ms dotnet/aot 9.0.301
csharp 3-m.cs 666ms 1.4ms 29.9MB 1670ms 10ms dotnet 9.0.301
ocaml 2.ml 1159ms 5.5ms 6.1MB 1150ms 0ms ocaml 5.3.0
csharp 3-m.cs 1209ms 1.7ms 25.9MB 4553ms 7ms mono 6.12.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 129ms 0.6ms 10.8MB 450ms 3ms dotnet/aot 9.0.301
csharp 3-m.cs 251ms 7.7ms 29.0MB 460ms 10ms dotnet 9.0.301
ocaml 2.ml 294ms 4.6ms 5.2MB 283ms 0ms ocaml 5.3.0
csharp 3-m.cs 354ms 11ms 25.4MB 1197ms 3ms mono 6.12.0