OCaml VS C# benchmarks

Current benchmark data was generated on Sat Mar 29 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 936ms 4.1ms 186.8MB 927ms 150ms dotnet 9.0.202
csharp 1.cs 1043ms 56ms 186.1MB 1020ms 140ms dotnet/aot 9.0.202
csharp 1.cs 1768ms 82ms 102.0MB 1990ms 220ms mono 6.12.0
ocaml 1.ml 3076ms 70ms 157.2MB 2993ms 73ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 121ms 1.8ms 32.6MB 83ms 33ms dotnet/aot 9.0.202
csharp 1.cs 152ms 5.0ms 44.1MB 130ms 13ms mono 6.12.0
csharp 1.cs 204ms 10ms 53.0MB 160ms 40ms dotnet 9.0.202
ocaml 1.ml 223ms 5.5ms 19.1MB 203ms 3ms 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 2920ms 14ms 4.9MB 2910ms 0ms ocaml 5.3.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 246ms 2.4ms 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 133ms 5.3ms 22.5MB 363ms 100ms dotnet/aot 9.0.202
csharp 5-m.cs 201ms 11ms 38.4MB 463ms 130ms dotnet 9.0.202
csharp 5-m.cs 243ms 12ms 43.8MB 663ms 127ms mono 6.12.0
ocaml 6.ml 347ms 0.6ms 24.8MB 333ms 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 24ms 0.9ms 15.5MB 33ms 17ms dotnet/aot 9.0.202
ocaml 6.ml 39ms 0.3ms 7.3MB 30ms 0ms ocaml 5.3.0
csharp 5-m.cs 64ms 4.1ms 37.1MB 87ms 13ms dotnet 9.0.202
csharp 5-m.cs 72ms 0.8ms 31.4MB 103ms 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.9ms 0.1ms 5.0MB 0ms 0ms ocaml 5.3.0
csharp 1.cs 9.1ms 3.9ms 9.8MB 0ms 0ms dotnet/aot 9.0.202
csharp 1.cs 31ms 1.0ms 21.3MB 20ms 0ms mono 6.12.0
csharp 1.cs 35ms 0.9ms 26.3MB 18ms 8ms dotnet 9.0.202

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 99ms 2.2ms 10.0MB 83ms 0ms dotnet/aot 9.0.202
csharp 2.cs 148ms 2.5ms 21.1MB 137ms 0ms mono 6.12.0
ocaml 1.ml 185ms 5.6ms 6.4MB 173ms 0ms ocaml 5.3.0
csharp 2.cs 253ms 6.8ms 29.5MB 237ms 10ms dotnet 9.0.202
csharp 1.cs 1055ms 14ms 13.3MB 1030ms 10ms dotnet/aot 9.0.202
csharp 1.cs 1320ms 22ms 33.1MB 1303ms 13ms dotnet 9.0.202
csharp 1.cs 3366ms 16ms 45.5MB 3320ms 33ms mono 6.12.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 272ms 3.2ms 10.0MB 257ms 0ms dotnet/aot 9.0.202
csharp 2.cs 362ms 3.0ms 22.7MB 350ms 0ms mono 6.12.0
csharp 2.cs 400ms 1.6ms 29.4MB 380ms 10ms dotnet 9.0.202
ocaml 1.ml 537ms 16ms 6.6MB 527ms 0ms ocaml 5.3.0
csharp 1.cs 3130ms 20ms 13.3MB 3103ms 10ms dotnet/aot 9.0.202
csharp 1.cs 3642ms 24ms 32.9MB 3630ms 20ms dotnet 9.0.202
csharp 1.cs timeout 0.0ms 45.6MB 4947ms 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 53ms 1.2ms 9.9MB 40ms 0ms dotnet/aot 9.0.202
ocaml 1.ml 76ms 0.7ms 5.9MB 70ms 0ms ocaml 5.3.0
csharp 2.cs 93ms 2.5ms 23.2MB 80ms 0ms mono 6.12.0
csharp 2.cs 164ms 3.2ms 29.3MB 147ms 7ms dotnet 9.0.202
csharp 1.cs 1626ms 6.1ms 32.8MB 1617ms 10ms dotnet 9.0.202
csharp 1.cs 1807ms 5.4ms 13.1MB 1790ms 0ms dotnet/aot 9.0.202
csharp 1.cs 1820ms 10ms 28.7MB 1807ms 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 566ms 6.2ms 123.7MB 513ms 90ms dotnet/aot 9.0.202
csharp 1.cs 603ms 14ms 150.0MB 553ms 120ms dotnet/aot 9.0.202
csharp 2.cs 683ms 21ms 135.9MB 640ms 97ms dotnet 9.0.202
csharp 1.cs 780ms 24ms 163.5MB 717ms 137ms dotnet 9.0.202
ocaml 1.ml 1097ms 8.4ms 70.3MB 1057ms 30ms ocaml 5.3.0
csharp 1.cs 1338ms 54ms 140.0MB 1567ms 160ms mono 6.12.0
ocaml 2.ml 2087ms 30ms 91.7MB 2037ms 33ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 138ms 6.8ms 57.0MB 110ms 30ms dotnet/aot 9.0.202
ocaml 1.ml 149ms 1.0ms 21.7MB 133ms 7ms ocaml 5.3.0
csharp 1.cs 154ms 7.0ms 74.7MB 117ms 53ms dotnet/aot 9.0.202
csharp 2.cs 258ms 1.2ms 74.8MB 233ms 37ms dotnet 9.0.202
csharp 1.cs 267ms 1.6ms 69.5MB 237ms 33ms mono 6.12.0
csharp 1.cs 285ms 10ms 91.3MB 237ms 67ms dotnet 9.0.202
ocaml 2.ml 362ms 2.4ms 27.7MB 343ms 3ms ocaml 5.3.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 9.cs 359ms 1.0ms 27.5MB 340ms 7ms dotnet 9.0.202
csharp 8.cs 372ms 0.3ms 9.8MB 360ms 0ms dotnet/aot 9.0.202
ocaml 1.ml 377ms 1.5ms 5.3MB 367ms 0ms ocaml 5.3.0
csharp 8.cs 427ms 7.6ms 27.6MB 403ms 7ms dotnet 9.0.202
csharp 8.cs 1248ms 2.7ms 20.8MB 1233ms 0ms mono 6.12.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 40ms 1.1ms 5.2MB 30ms 0ms ocaml 5.3.0
csharp 8.cs 47ms 1.0ms 9.9MB 33ms 0ms dotnet/aot 9.0.202
csharp 9.cs 92ms 0.8ms 27.6MB 73ms 3ms dotnet 9.0.202
csharp 8.cs 99ms 5.1ms 27.8MB 80ms 7ms dotnet 9.0.202
csharp 8.cs 165ms 1.1ms 22.5MB 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 336ms 9.3ms 78.8MB 310ms 13ms dotnet/aot 9.0.202
csharp 1.cs 351ms 10ms 96.3MB 327ms 10ms dotnet 9.0.202
csharp 2.cs 398ms 5.1ms 35.6MB 377ms 7ms dotnet 9.0.202
csharp 2.cs 426ms 3.3ms 17.5MB 410ms 0ms dotnet/aot 9.0.202
csharp 1.cs 546ms 4.8ms 84.0MB 523ms 10ms mono 6.12.0
ocaml 1.ml 961ms 7.1ms 552.4MB 900ms 47ms ocaml 5.3.0
csharp 2.cs 1866ms 4.1ms 29.5MB 1850ms 0ms mono 6.12.0
ocaml 2.ml 1888ms 3.0ms 18.9MB 1877ms 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 4.5ms 24.9MB 50ms 0ms dotnet/aot 9.0.202
csharp 1.cs 104ms 2.0ms 42.5MB 80ms 10ms dotnet 9.0.202
csharp 2.cs 108ms 1.7ms 11.9MB 93ms 0ms dotnet/aot 9.0.202
csharp 2.cs 127ms 1.3ms 29.9MB 110ms 7ms dotnet 9.0.202
csharp 1.cs 143ms 1.6ms 36.0MB 127ms 3ms mono 6.12.0
ocaml 1.ml 191ms 10ms 142.3MB 167ms 10ms ocaml 5.3.0
ocaml 2.ml 465ms 0.7ms 9.1MB 457ms 0ms ocaml 5.3.0
csharp 2.cs 483ms 2.3ms 21.1MB 467ms 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 1756ms 6.4ms 418.5MB 1660ms 147ms dotnet/aot 9.0.202
csharp 5.cs 2077ms 15ms 447.0MB 2130ms 187ms dotnet 9.0.202
csharp 6.cs 2732ms 45ms 438.4MB 2687ms 183ms dotnet 9.0.202
csharp 5.cs 4299ms 17ms 418.9MB 4193ms 153ms dotnet/aot 9.0.202
ocaml 2.ml timeout 0.0ms 474.1MB 4813ms 173ms ocaml 5.3.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 190ms 3.8ms 47.6MB 163ms 17ms dotnet/aot 9.0.202
csharp 5.cs 292ms 5.1ms 72.7MB 263ms 30ms dotnet 9.0.202
csharp 6.cs 387ms 1.4ms 70.0MB 350ms 30ms dotnet 9.0.202
csharp 5.cs 441ms 5.4ms 47.3MB 420ms 20ms dotnet/aot 9.0.202
ocaml 2.ml 550ms 3.3ms 57.1MB 517ms 20ms 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 1879ms 22ms 10.4MB 7240ms 10ms dotnet/aot 9.0.202
csharp 3-m.cs 1974ms 78ms 29.9MB 7297ms 17ms dotnet 9.0.202
ocaml 2.ml 4568ms 13ms 6.4MB 4557ms 0ms ocaml 5.3.0
csharp 3-m.cs 4747ms 137ms 25.7MB 18010ms 23ms mono 6.12.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 483ms 11ms 10.5MB 1800ms 7ms dotnet/aot 9.0.202
csharp 3-m.cs 534ms 1.3ms 29.9MB 1873ms 13ms dotnet 9.0.202
ocaml 2.ml 1153ms 6.9ms 6.1MB 1143ms 0ms ocaml 5.3.0
csharp 3-m.cs 1230ms 55ms 25.6MB 4607ms 10ms mono 6.12.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 128ms 0.7ms 10.5MB 447ms 7ms dotnet/aot 9.0.202
csharp 3-m.cs 183ms 7.9ms 28.3MB 503ms 10ms dotnet 9.0.202
ocaml 2.ml 290ms 2.8ms 5.2MB 280ms 0ms ocaml 5.3.0
csharp 3-m.cs 354ms 10ms 24.9MB 1193ms 7ms mono 6.12.0