Kotlin VS C# benchmarks

Current benchmark data was generated on Sun Dec 01 2024, 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
kotlin 1.kt 480ms 16ms 575.9MB 567ms 87ms kotlin/jvm 21
csharp 1.cs 960ms 14ms 181.9MB 970ms 120ms dotnet/aot 9.0.100
csharp 1.cs 1111ms 56ms 201.7MB 1013ms 177ms dotnet 9.0.100
csharp 1.cs 1775ms 93ms 101.7MB 2017ms 210ms mono 6.12.0
kotlin 1-m.kt 3116ms 32ms 248.5MB 5177ms 713ms kotlin/native 1.8.21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 102ms 1.9ms 158.0MB 110ms 27ms kotlin/jvm 21
csharp 1.cs 134ms 12ms 40.8MB 70ms 47ms dotnet/aot 9.0.100
csharp 1.cs 145ms 2.2ms 48.1MB 120ms 13ms mono 6.12.0
csharp 1.cs 202ms 6.0ms 58.2MB 147ms 47ms dotnet 9.0.100
kotlin 1-m.kt 299ms 30ms 32.5MB 463ms 60ms kotlin/native 1.8.21

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 2-m.kt 1604ms 72ms 235.4MB 5907ms 97ms kotlin/jvm 21
csharp 1-m.cs 2131ms 158ms 64.3MB 7320ms 87ms dotnet/aot 9.0.100
kotlin 1.kt 2135ms 35ms 220.1MB 2943ms 63ms kotlin/jvm 21
csharp 1-m.cs 2544ms 83ms 88.7MB 8743ms 133ms dotnet 9.0.100
kotlin 1.kt timeout 0.0ms 14.9MB 6260ms 513ms kotlin/native 1.8.21
kotlin 2-m.kt timeout 0.0ms 85.0MB 19090ms 157ms kotlin/native 1.8.21

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1-m.cs 169ms 15ms 31.1MB 443ms 23ms dotnet/aot 9.0.100
csharp 1-m.cs 299ms 25ms 49.4MB 797ms 27ms dotnet 9.0.100
kotlin 2-m.kt 419ms 4.7ms 54.7MB 1533ms 27ms kotlin/native 1.8.21
kotlin 1-m.kt 483ms 3.9ms 74.0MB 1130ms 37ms kotlin/jvm 21
kotlin 1.kt 678ms 2.7ms 10.8MB 817ms 63ms kotlin/native 1.8.21
kotlin 2-m.kt 790ms 26ms 99.0MB 2727ms 67ms kotlin/jvm 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 2.4ms 0.2ms 4.7MB 0ms 0ms kotlin/native 1.8.21
csharp 1.cs 9.1ms 5.1ms 13.5MB 0ms 0ms dotnet/aot 9.0.100
csharp 1.cs 32ms 0.8ms 23.7MB 20ms 0ms mono 6.12.0
csharp 1.cs 37ms 0.4ms 32.6MB 20ms 4ms dotnet 9.0.100
kotlin 1.kt 58ms 4.7ms 47.4MB 56ms 16ms kotlin/jvm 21

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2-http2.cs 543ms 21ms 120.8MB 740ms 163ms dotnet 9.0.100
csharp 2-http3.cs 691ms 14ms 157.1MB 1143ms 237ms dotnet 9.0.100
csharp 2-m.cs 700ms 8.0ms 150.5MB 797ms 573ms dotnet 9.0.100
csharp 1-m.cs 799ms 31ms 172.0MB 1093ms 723ms dotnet 9.0.100
kotlin 1.kt timeout 0.0ms 394.9MB 16237ms 2760ms kotlin/jvm 21
kotlin 2.kt timeout 0.0ms 429.2MB 15370ms 2387ms kotlin/jvm 21

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 410ms 18ms 99.1MB 407ms 197ms dotnet 9.0.100
csharp 1-m.cs 447ms 15ms 109.7MB 547ms 233ms dotnet 9.0.100
csharp 2-http2.cs 452ms 6.3ms 99.7MB 507ms 97ms dotnet 9.0.100
csharp 2-http3.cs 515ms 19ms 109.8MB 607ms 120ms dotnet 9.0.100
kotlin 2-m.kt 2027ms 55ms 244.2MB 5847ms 583ms kotlin/jvm 21
kotlin 1-m.kt 2574ms 75ms 211.5MB 7400ms 730ms kotlin/jvm 21

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 310ms 3.5ms 78.5MB 270ms 37ms dotnet 9.0.100
csharp 1.cs 721ms 15ms 153.3MB 737ms 83ms dotnet 9.0.100
kotlin 1-m.kt 892ms 33ms 202.2MB 2373ms 113ms kotlin/jvm 21

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 1627ms 30ms 225.3MB 1817ms 93ms dotnet 9.0.100
kotlin 1-m.kt 2318ms 69ms 758.1MB 5017ms 187ms kotlin/jvm 21
csharp 1.cs 2565ms 53ms 682.4MB 2963ms 373ms dotnet 9.0.100

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 94ms 2.1ms 13.8MB 80ms 0ms dotnet/aot 9.0.100
csharp 2.cs 150ms 3.6ms 24.7MB 137ms 0ms mono 6.12.0
kotlin 1-m.kt 185ms 5.2ms 96.3MB 300ms 30ms kotlin/jvm 21
kotlin 2-m.kt 198ms 2.7ms 103.3MB 427ms 33ms kotlin/jvm 21
csharp 2.cs 257ms 15ms 35.6MB 233ms 7ms dotnet 9.0.100
kotlin 2.kt 303ms 3.4ms 7.6MB 423ms 17ms kotlin/native 1.8.21
kotlin 1.kt 505ms 3.2ms 7.8MB 597ms 7ms kotlin/native 1.8.21
csharp 1.cs 1062ms 8.1ms 17.1MB 1037ms 10ms dotnet/aot 9.0.100
csharp 1.cs 1361ms 54ms 37.1MB 1357ms 3ms dotnet 9.0.100
csharp 1.cs 3397ms 88ms 45.7MB 3350ms 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 265ms 4.1ms 13.9MB 250ms 0ms dotnet/aot 9.0.100
kotlin 2-m.kt 310ms 1.0ms 213.2MB 547ms 50ms kotlin/jvm 21
kotlin 1.kt 329ms 4.8ms 204.6MB 437ms 40ms kotlin/jvm 21
csharp 2.cs 358ms 3.2ms 24.3MB 340ms 7ms mono 6.12.0
csharp 2.cs 401ms 1.0ms 35.5MB 377ms 13ms dotnet 9.0.100
kotlin 2.kt 910ms 4.1ms 7.8MB 1313ms 40ms kotlin/native 1.8.21
kotlin 1.kt 1549ms 11ms 7.8MB 1893ms 20ms kotlin/native 1.8.21
csharp 1.cs 3170ms 34ms 17.2MB 3147ms 13ms dotnet/aot 9.0.100
csharp 1.cs 3581ms 8.0ms 39.1MB 3553ms 30ms dotnet 9.0.100
csharp 1.cs timeout 0.0ms 47.7MB 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 51ms 1.5ms 13.5MB 37ms 3ms dotnet/aot 9.0.100
csharp 2.cs 92ms 0.6ms 27.2MB 80ms 0ms mono 6.12.0
kotlin 2.kt 137ms 0.1ms 5.7MB 190ms 0ms kotlin/native 1.8.21
kotlin 1-m.kt 142ms 1.1ms 90.9MB 277ms 27ms kotlin/jvm 21
kotlin 2-m.kt 158ms 11ms 93.7MB 300ms 37ms kotlin/jvm 21
kotlin 1.kt 166ms 2.7ms 5.8MB 203ms 0ms kotlin/native 1.8.21
csharp 2.cs 190ms 12ms 35.5MB 153ms 0ms dotnet 9.0.100
csharp 1.cs 1618ms 7.3ms 36.6MB 1607ms 13ms dotnet 9.0.100
csharp 1.cs 1808ms 9.3ms 17.0MB 1787ms 3ms dotnet/aot 9.0.100
csharp 1.cs 1811ms 3.9ms 28.8MB 1797ms 0ms mono 6.12.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 353ms 4.0ms 679.4MB 377ms 90ms kotlin/jvm 21
csharp 2.cs 562ms 1.0ms 123.8MB 487ms 100ms dotnet/aot 9.0.100
csharp 1.cs 592ms 5.3ms 153.5MB 543ms 123ms dotnet/aot 9.0.100
csharp 2.cs 703ms 2.1ms 142.3MB 653ms 90ms dotnet 9.0.100
csharp 1.cs 777ms 8.8ms 172.2MB 700ms 137ms dotnet 9.0.100
csharp 1.cs 1424ms 29ms 146.6MB 1683ms 207ms mono 6.12.0
kotlin 1-m.kt 1537ms 54ms 136.5MB 2363ms 343ms kotlin/native 1.8.21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1-m.kt 131ms 0.9ms 206.5MB 157ms 40ms kotlin/jvm 21
csharp 2.cs 143ms 0.7ms 65.3MB 103ms 37ms dotnet/aot 9.0.100
csharp 1.cs 159ms 1.7ms 81.8MB 110ms 60ms dotnet/aot 9.0.100
csharp 1.cs 269ms 7.6ms 69.4MB 233ms 40ms mono 6.12.0
csharp 2.cs 272ms 10ms 84.7MB 233ms 33ms dotnet 9.0.100
csharp 1.cs 275ms 3.5ms 99.2MB 240ms 63ms dotnet 9.0.100
kotlin 1-m.kt 319ms 4.8ms 40.5MB 470ms 77ms kotlin/native 1.8.21

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 9.cs 362ms 1.8ms 33.9MB 337ms 13ms dotnet 9.0.100
csharp 8.cs 370ms 2.0ms 15.7MB 350ms 0ms dotnet/aot 9.0.100
kotlin 1n.kt 407ms 3.6ms 4.7MB 400ms 0ms kotlin/native 1.8.21
csharp 8.cs 436ms 9.8ms 33.7MB 410ms 3ms dotnet 9.0.100
kotlin 1.kt 446ms 1.4ms 49.5MB 480ms 23ms kotlin/jvm 21
csharp 8.cs 1249ms 3.5ms 24.2MB 1233ms 0ms mono 6.12.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1n.kt 46ms 0.7ms 4.7MB 40ms 0ms kotlin/native 1.8.21
csharp 8.cs 48ms 0.3ms 15.7MB 33ms 0ms dotnet/aot 9.0.100
csharp 8.cs 96ms 0.6ms 31.9MB 70ms 10ms dotnet 9.0.100
csharp 9.cs 97ms 7.6ms 34.1MB 67ms 13ms dotnet 9.0.100
kotlin 1.kt 123ms 1.1ms 49.4MB 163ms 20ms kotlin/jvm 21
csharp 8.cs 166ms 2.5ms 24.2MB 150ms 0ms mono 6.12.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 3219ms 8.8ms 21.8MB 3090ms 130ms dotnet/aot 9.0.100
csharp 1.cs 3623ms 63ms 44.3MB 3610ms 137ms dotnet 9.0.100
kotlin 1.kt 3707ms 69ms 352.5MB 4577ms 93ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 20.9MB 6393ms 267ms kotlin/native 1.8.21
kotlin 2n.kt timeout 0.0ms 8.2MB 4993ms 160ms kotlin/native 1.8.21

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 760ms 6.6ms 21.2MB 727ms 20ms dotnet/aot 9.0.100
csharp 1.cs 983ms 4.7ms 44.0MB 1063ms 43ms dotnet 9.0.100
kotlin 1-m.kt 1004ms 32ms 354.5MB 1770ms 80ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 7.4MB 6367ms 263ms kotlin/native 1.8.21
kotlin 2n.kt timeout 0.0ms 8.3MB 5000ms 160ms kotlin/native 1.8.21

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 1763ms 7.0ms 426.0MB 1673ms 140ms dotnet/aot 9.0.100
csharp 5.cs 2089ms 43ms 458.3MB 2153ms 177ms dotnet 9.0.100
csharp 6.cs 2779ms 77ms 450.3MB 2717ms 193ms dotnet 9.0.100
csharp 5.cs 4277ms 14ms 428.0MB 4177ms 153ms dotnet/aot 9.0.100
kotlin 1.kt timeout 0.0ms 171.4MB 5410ms 40ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 279.1MB 4977ms 917ms kotlin/native 1.8.21

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 194ms 4.0ms 54.2MB 163ms 17ms dotnet/aot 9.0.100
csharp 5.cs 309ms 13ms 80.6MB 273ms 23ms dotnet 9.0.100
csharp 6.cs 410ms 7.1ms 78.3MB 377ms 30ms dotnet 9.0.100
csharp 5.cs 444ms 2.4ms 56.4MB 417ms 17ms dotnet/aot 9.0.100
kotlin 1-m.kt 814ms 12ms 134.0MB 1243ms 23ms kotlin/jvm 21
kotlin 1n.kt 3217ms 72ms 65.1MB 4043ms 10ms kotlin/native 1.8.21

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 2838ms 4.6ms 17.0MB 2797ms 30ms dotnet/aot 9.0.100
csharp 1.cs 2989ms 14ms 39.4MB 3057ms 47ms dotnet 9.0.100
kotlin 1.kt 3074ms 58ms 231.7MB 3977ms 60ms kotlin/jvm 21

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 720ms 3.0ms 17.0MB 697ms 13ms dotnet/aot 9.0.100
csharp 1.cs 987ms 1.3ms 41.1MB 1080ms 20ms dotnet 9.0.100
kotlin 1-m.kt 1039ms 9.3ms 232.3MB 1953ms 67ms kotlin/jvm 21