Kotlin VS C# benchmarks

Current benchmark data was generated on Tue Mar 25 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
kotlin 1.kt 482ms 0.5ms 578.0MB 560ms 90ms kotlin/jvm 21
csharp 1.cs 987ms 29ms 207.3MB 987ms 150ms dotnet 9.0.202
csharp 1.cs 1059ms 17ms 186.1MB 1060ms 143ms dotnet/aot 9.0.202
csharp 1.cs 1745ms 50ms 99.7MB 1947ms 213ms mono 6.12.0
kotlin 1-m.kt 3201ms 42ms 246.5MB 5153ms 850ms kotlin/native 1.8.21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 107ms 0.7ms 160.3MB 117ms 27ms kotlin/jvm 21
csharp 1.cs 132ms 9.0ms 34.1MB 97ms 30ms dotnet/aot 9.0.202
csharp 1.cs 151ms 3.1ms 44.1MB 127ms 10ms mono 6.12.0
csharp 1.cs 202ms 3.4ms 50.0MB 160ms 37ms dotnet 9.0.202
kotlin 1-m.kt 283ms 2.6ms 30.5MB 453ms 67ms 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 1971ms 329ms 240.9MB 7313ms 117ms kotlin/jvm 21
kotlin 1.kt 2173ms 16ms 221.5MB 2997ms 77ms kotlin/jvm 21
csharp 1-m.cs 2245ms 111ms 50.1MB 7953ms 83ms dotnet/aot 9.0.202
csharp 1-m.cs 2817ms 51ms 72.8MB 8863ms 100ms dotnet 9.0.202
kotlin 1.kt timeout 0.0ms 12.7MB 5997ms 487ms kotlin/native 1.8.21
kotlin 2-m.kt timeout 0.0ms 69.6MB 19047ms 153ms 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 13ms 18.8MB 480ms 20ms dotnet/aot 9.0.202
csharp 1-m.cs 272ms 7.4ms 37.8MB 760ms 20ms dotnet 9.0.202
kotlin 2-m.kt 432ms 2.7ms 14.5MB 1600ms 20ms kotlin/native 1.8.21
kotlin 1-m.kt 468ms 13ms 76.2MB 1060ms 43ms kotlin/jvm 21
kotlin 1.kt 689ms 14ms 8.8MB 817ms 63ms kotlin/native 1.8.21
kotlin 2-m.kt 815ms 9.7ms 96.8MB 2827ms 77ms kotlin/jvm 21

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 2.2ms 0.4ms 2.6MB 0ms 0ms kotlin/native 1.8.21
csharp 1.cs 8.7ms 2.7ms 9.4MB 0ms 0ms dotnet/aot 9.0.202
csharp 1.cs 32ms 0.6ms 21.6MB 20ms 0ms mono 6.12.0
csharp 1.cs 36ms 1.2ms 26.1MB 20ms 6ms dotnet 9.0.202
kotlin 1.kt 59ms 4.0ms 47.2MB 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 522ms 8.7ms 108.4MB 740ms 150ms dotnet 9.0.202
csharp 2-m.cs 593ms 47ms 139.9MB 757ms 527ms dotnet 9.0.202
csharp 2-http3.cs 681ms 9.8ms 143.6MB 1147ms 247ms dotnet 9.0.202
csharp 1-m.cs 760ms 45ms 167.5MB 1197ms 743ms dotnet 9.0.202
kotlin 2-m.kt 4877ms 110ms 433.3MB 14973ms 2650ms kotlin/jvm 21
kotlin 1.kt timeout 0.0ms 400.8MB 16150ms 2810ms kotlin/jvm 21

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2-m.cs 360ms 6.9ms 87.0MB 400ms 183ms dotnet 9.0.202
csharp 1-m.cs 407ms 5.7ms 97.6MB 537ms 237ms dotnet 9.0.202
csharp 2-http2.cs 454ms 11ms 86.1MB 523ms 87ms dotnet 9.0.202
csharp 2-http3.cs 515ms 4.0ms 93.7MB 603ms 123ms dotnet 9.0.202
kotlin 1-m.kt 2051ms 215ms 216.8MB 5830ms 630ms kotlin/jvm 21
kotlin 2-m.kt 2169ms 316ms 243.8MB 3967ms 420ms 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 308ms 3.9ms 69.0MB 277ms 30ms dotnet 9.0.202
csharp 1.cs 811ms 82ms 143.7MB 847ms 90ms dotnet 9.0.202
kotlin 1-m.kt 860ms 106ms 201.0MB 2313ms 90ms kotlin/jvm 21

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 1626ms 110ms 235.0MB 1807ms 103ms dotnet 9.0.202
kotlin 1-m.kt 2344ms 51ms 740.7MB 5013ms 167ms kotlin/jvm 21
csharp 1.cs 2704ms 68ms 728.7MB 3260ms 443ms 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 97ms 3.1ms 9.8MB 87ms 0ms dotnet/aot 9.0.202
csharp 2.cs 148ms 3.1ms 22.8MB 137ms 0ms mono 6.12.0
kotlin 1-m.kt 181ms 4.2ms 96.8MB 300ms 27ms kotlin/jvm 21
kotlin 2-m.kt 198ms 2.0ms 103.5MB 420ms 40ms kotlin/jvm 21
csharp 2.cs 253ms 2.7ms 29.5MB 240ms 7ms dotnet 9.0.202
kotlin 2.kt 310ms 2.1ms 5.9MB 433ms 20ms kotlin/native 1.8.21
kotlin 1.kt 518ms 11ms 5.8MB 620ms 3ms kotlin/native 1.8.21
csharp 1.cs 1059ms 4.4ms 13.3MB 1040ms 3ms dotnet/aot 9.0.202
csharp 1.cs 1330ms 8.7ms 32.6MB 1317ms 13ms dotnet 9.0.202
csharp 1.cs 3392ms 39ms 47.5MB 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 270ms 2.8ms 9.8MB 257ms 0ms dotnet/aot 9.0.202
kotlin 2-m.kt 307ms 3.5ms 215.7MB 537ms 43ms kotlin/jvm 21
kotlin 1.kt 335ms 2.6ms 204.7MB 443ms 43ms kotlin/jvm 21
csharp 2.cs 364ms 2.7ms 21.3MB 350ms 0ms mono 6.12.0
csharp 2.cs 407ms 7.8ms 29.1MB 390ms 10ms dotnet 9.0.202
kotlin 2.kt 927ms 16ms 7.1MB 1330ms 50ms kotlin/native 1.8.21
kotlin 1.kt 1539ms 8.4ms 5.8MB 1870ms 23ms kotlin/native 1.8.21
csharp 1.cs 3140ms 32ms 13.3MB 3113ms 17ms dotnet/aot 9.0.202
csharp 1.cs 3697ms 152ms 32.9MB 3680ms 23ms dotnet 9.0.202
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 53ms 2.4ms 9.8MB 40ms 0ms dotnet/aot 9.0.202
csharp 2.cs 94ms 2.5ms 21.1MB 80ms 0ms mono 6.12.0
kotlin 2.kt 142ms 1.4ms 3.6MB 200ms 0ms kotlin/native 1.8.21
kotlin 1-m.kt 142ms 1.4ms 92.3MB 267ms 30ms kotlin/jvm 21
kotlin 2-m.kt 153ms 3.2ms 95.8MB 303ms 30ms kotlin/jvm 21
csharp 2.cs 162ms 2.3ms 29.1MB 143ms 7ms dotnet 9.0.202
kotlin 1.kt 171ms 1.8ms 3.8MB 217ms 0ms kotlin/native 1.8.21
csharp 1.cs 1629ms 4.7ms 32.5MB 1620ms 13ms dotnet 9.0.202
csharp 1.cs 1805ms 4.0ms 12.9MB 1787ms 3ms dotnet/aot 9.0.202
csharp 1.cs 1830ms 4.2ms 26.7MB 1813ms 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 361ms 2.6ms 681.5MB 383ms 97ms kotlin/jvm 21
csharp 2.cs 584ms 14ms 120.7MB 530ms 90ms dotnet/aot 9.0.202
csharp 1.cs 643ms 4.4ms 149.1MB 590ms 130ms dotnet/aot 9.0.202
csharp 2.cs 676ms 4.0ms 135.9MB 640ms 93ms dotnet 9.0.202
csharp 1.cs 786ms 10ms 170.1MB 717ms 137ms dotnet 9.0.202
csharp 1.cs 1310ms 9.0ms 139.7MB 1530ms 160ms mono 6.12.0
kotlin 1-m.kt 1532ms 6.5ms 134.6MB 2337ms 353ms kotlin/native 1.8.21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 133ms 0.6ms 208.5MB 157ms 37ms kotlin/jvm 21
csharp 2.cs 146ms 5.1ms 56.7MB 110ms 40ms dotnet/aot 9.0.202
csharp 1.cs 162ms 5.8ms 74.4MB 130ms 47ms dotnet/aot 9.0.202
csharp 1.cs 266ms 4.9ms 69.5MB 233ms 37ms mono 6.12.0
csharp 2.cs 266ms 1.7ms 74.3MB 227ms 37ms dotnet 9.0.202
csharp 1.cs 276ms 1.3ms 89.6MB 247ms 53ms dotnet 9.0.202
kotlin 1-m.kt 312ms 1.7ms 38.5MB 457ms 73ms 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 364ms 3.9ms 27.8MB 340ms 7ms dotnet 9.0.202
csharp 8.cs 372ms 2.5ms 9.9MB 357ms 0ms dotnet/aot 9.0.202
kotlin 1n.kt 404ms 1.3ms 2.5MB 393ms 0ms kotlin/native 1.8.21
csharp 8.cs 422ms 2.6ms 27.5MB 400ms 10ms dotnet 9.0.202
kotlin 1.kt 453ms 4.2ms 49.4MB 497ms 20ms kotlin/jvm 21
csharp 8.cs 1256ms 5.3ms 22.3MB 1240ms 3ms mono 6.12.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1n.kt 44ms 0.5ms 2.5MB 37ms 0ms kotlin/native 1.8.21
csharp 8.cs 47ms 0.7ms 9.8MB 30ms 0ms dotnet/aot 9.0.202
csharp 8.cs 96ms 1.3ms 27.5MB 80ms 10ms dotnet 9.0.202
csharp 9.cs 97ms 4.6ms 27.8MB 73ms 10ms dotnet 9.0.202
kotlin 1.kt 123ms 1.5ms 49.5MB 170ms 13ms kotlin/jvm 21
csharp 8.cs 165ms 1.2ms 20.8MB 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 3274ms 18ms 13.9MB 3170ms 103ms dotnet/aot 9.0.202
csharp 1.cs 3581ms 55ms 38.1MB 3593ms 127ms dotnet 9.0.202
kotlin 1.kt 3765ms 63ms 355.2MB 4593ms 107ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 5.4MB 6277ms 300ms kotlin/native 1.8.21
kotlin 2n.kt timeout 0.0ms 6.3MB 4990ms 180ms 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 1.6ms 13.5MB 723ms 23ms dotnet/aot 9.0.202
csharp 1.cs 993ms 12ms 37.8MB 1093ms 37ms dotnet 9.0.202
kotlin 1-m.kt 1000ms 30ms 355.3MB 1780ms 93ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 5.4MB 6287ms 287ms kotlin/native 1.8.21
kotlin 2n.kt timeout 0.0ms 6.2MB 5010ms 157ms 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 1772ms 2.8ms 418.4MB 1670ms 153ms dotnet/aot 9.0.202
csharp 5.cs 2097ms 27ms 445.0MB 2143ms 193ms dotnet 9.0.202
csharp 6.cs 2712ms 14ms 440.8MB 2663ms 170ms dotnet 9.0.202
csharp 5.cs 4384ms 78ms 419.4MB 4280ms 153ms dotnet/aot 9.0.202
kotlin 1.kt timeout 0.0ms 171.3MB 5430ms 43ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 277.0MB 5163ms 730ms 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 191ms 2.2ms 47.5MB 167ms 17ms dotnet/aot 9.0.202
csharp 5.cs 299ms 1.6ms 72.7MB 270ms 33ms dotnet 9.0.202
csharp 6.cs 395ms 5.4ms 70.3MB 363ms 27ms dotnet 9.0.202
csharp 5.cs 445ms 2.1ms 47.0MB 420ms 17ms dotnet/aot 9.0.202
kotlin 1-m.kt 821ms 21ms 137.7MB 1247ms 47ms kotlin/jvm 21
kotlin 1n.kt 3187ms 12ms 65.0MB 3933ms 17ms 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 2855ms 23ms 13.0MB 2817ms 27ms dotnet/aot 9.0.202
csharp 1.cs 2964ms 16ms 35.3MB 3037ms 40ms dotnet 9.0.202
kotlin 1.kt 3098ms 21ms 233.4MB 3973ms 77ms kotlin/jvm 21

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 723ms 0.6ms 13.1MB 700ms 10ms dotnet/aot 9.0.202
csharp 1.cs 1007ms 8.8ms 35.4MB 1100ms 20ms dotnet 9.0.202
kotlin 1-m.kt 1009ms 48ms 235.5MB 1923ms 73ms kotlin/jvm 21