C# VS Kotlin 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
kotlin 1.kt 492ms 35ms 1223.9MB 553ms 103ms kotlin/jvm 21
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
kotlin 1-m.kt 3082ms 15ms 246.4MB 5163ms 690ms kotlin/native 1.8.21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 104ms 0.8ms 160.3MB 113ms 27ms kotlin/jvm 21
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
kotlin 1-m.kt 276ms 9.6ms 30.3MB 443ms 57ms 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 1734ms 92ms 234.6MB 6420ms 97ms kotlin/jvm 21
kotlin 1.kt 2168ms 9.4ms 222.7MB 3003ms 67ms kotlin/jvm 21
csharp 1-m.cs 2184ms 61ms 51.4MB 7633ms 77ms dotnet/aot 9.0.202
csharp 1-m.cs 2802ms 47ms 74.2MB 9787ms 97ms dotnet 9.0.202
kotlin 1.kt timeout 0.0ms 12.9MB 6077ms 487ms kotlin/native 1.8.21
kotlin 2-m.kt timeout 0.0ms 117.1MB 18960ms 167ms 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 151ms 2.8ms 18.2MB 453ms 13ms dotnet/aot 9.0.202
csharp 1-m.cs 273ms 15ms 36.9MB 770ms 20ms dotnet 9.0.202
kotlin 2-m.kt 426ms 4.7ms 25.0MB 1567ms 20ms kotlin/native 1.8.21
kotlin 1-m.kt 474ms 4.8ms 76.6MB 1057ms 50ms kotlin/jvm 21
kotlin 1.kt 689ms 16ms 8.8MB 813ms 67ms kotlin/native 1.8.21
kotlin 2-m.kt 780ms 21ms 100.6MB 2703ms 63ms kotlin/jvm 21

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 4107ms 11ms 18.3MB 4083ms 10ms dotnet/aot 9.0.202
csharp 1.cs 4975ms 8.9ms 37.5MB 4940ms 20ms dotnet 9.0.202

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 678ms 1.2ms 14.5MB 660ms 7ms dotnet/aot 9.0.202
csharp 1.cs 864ms 7.8ms 34.0MB 840ms 13ms dotnet 9.0.202

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

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
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
kotlin 1.kt 1.9ms 0.2ms 2.6MB 0ms 0ms kotlin/native 1.8.21
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
kotlin 1.kt 52ms 0.7ms 47.2MB 62ms 14ms 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 513ms 1.7ms 108.8MB 730ms 153ms dotnet 9.0.202
csharp 2-m.cs 584ms 28ms 137.0MB 737ms 523ms dotnet 9.0.202
csharp 2-http3.cs 680ms 12ms 145.9MB 1130ms 243ms dotnet 9.0.202
csharp 1-m.cs 740ms 18ms 170.5MB 1157ms 727ms dotnet 9.0.202
kotlin 2-m.kt 4775ms 56ms 442.2MB 14967ms 2663ms kotlin/jvm 21
kotlin 1.kt timeout 0.0ms 391.3MB 16150ms 2790ms kotlin/jvm 21

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2-m.cs 361ms 3.7ms 87.3MB 390ms 197ms dotnet 9.0.202
csharp 1-m.cs 395ms 4.4ms 97.2MB 530ms 230ms dotnet 9.0.202
csharp 2-http2.cs 439ms 6.2ms 86.0MB 483ms 97ms dotnet 9.0.202
csharp 2-http3.cs 495ms 2.0ms 94.2MB 587ms 113ms dotnet 9.0.202
kotlin 1-m.kt 2114ms 204ms 206.1MB 5923ms 717ms kotlin/jvm 21
kotlin 2-m.kt 2322ms 100ms 242.4MB 5993ms 683ms 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 302ms 4.2ms 68.7MB 270ms 30ms dotnet 9.0.202
csharp 1.cs 774ms 76ms 143.4MB 790ms 80ms dotnet 9.0.202
kotlin 1-m.kt 835ms 90ms 208.3MB 2240ms 100ms kotlin/jvm 21

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 1491ms 6.1ms 234.1MB 1633ms 87ms dotnet 9.0.202
kotlin 1-m.kt 2326ms 37ms 834.4MB 5107ms 183ms kotlin/jvm 21
csharp 1.cs 2686ms 63ms 745.4MB 3240ms 437ms dotnet 9.0.202

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6-m.cs 463ms 17ms 45.8MB 1233ms 20ms dotnet/aot 9.0.202
csharp 6-m.cs 754ms 25ms 68.0MB 2087ms 33ms dotnet 9.0.202
csharp 6-m.cs 1028ms 27ms 66.9MB 2970ms 20ms mono 6.12.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6-m.cs 100ms 3.6ms 36.1MB 163ms 20ms dotnet/aot 9.0.202
csharp 6-m.cs 181ms 7.0ms 57.2MB 277ms 27ms dotnet 9.0.202
csharp 6-m.cs 199ms 1.7ms 58.1MB 380ms 17ms mono 6.12.0

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
kotlin 1-m.kt 183ms 4.3ms 96.4MB 297ms 23ms kotlin/jvm 21
kotlin 2-m.kt 198ms 3.5ms 105.0MB 417ms 30ms kotlin/jvm 21
csharp 2.cs 253ms 6.8ms 29.5MB 237ms 10ms dotnet 9.0.202
kotlin 2.kt 306ms 5.2ms 5.8MB 433ms 13ms kotlin/native 1.8.21
kotlin 1.kt 513ms 4.5ms 5.9MB 613ms 7ms kotlin/native 1.8.21
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
kotlin 2-m.kt 312ms 12ms 214.5MB 533ms 50ms kotlin/jvm 21
kotlin 1.kt 329ms 7.5ms 204.7MB 423ms 53ms kotlin/jvm 21
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
kotlin 2.kt 909ms 6.8ms 5.9MB 1307ms 47ms kotlin/native 1.8.21
kotlin 1.kt 1558ms 23ms 5.9MB 1883ms 23ms kotlin/native 1.8.21
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
csharp 2.cs 93ms 2.5ms 23.2MB 80ms 0ms mono 6.12.0
kotlin 2.kt 140ms 1.7ms 3.6MB 193ms 0ms kotlin/native 1.8.21
kotlin 1-m.kt 140ms 7.2ms 92.4MB 263ms 30ms kotlin/jvm 21
kotlin 2-m.kt 162ms 16ms 95.6MB 337ms 30ms kotlin/jvm 21
csharp 2.cs 164ms 3.2ms 29.3MB 147ms 7ms dotnet 9.0.202
kotlin 1.kt 170ms 1.5ms 3.8MB 213ms 0ms kotlin/native 1.8.21
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

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 4.cs 343ms 12ms 37.3MB 317ms 10ms dotnet 9.0.202
csharp 2.cs 519ms 26ms 39.6MB 497ms 10ms dotnet 9.0.202
csharp 1.cs 2081ms 46ms 36.4MB 2057ms 10ms dotnet 9.0.202
csharp 3.cs 2367ms 6.0ms 16.3MB 2353ms 0ms dotnet/aot 9.0.202
csharp 3.cs 2447ms 9.7ms 36.5MB 2423ms 10ms dotnet 9.0.202
csharp 1.cs 3956ms 79ms 16.4MB 3940ms 0ms dotnet/aot 9.0.202
csharp 1.cs timeout 0.0ms 23.2MB 4987ms 0ms mono 6.12.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 4.cs 79ms 2.3ms 34.4MB 60ms 10ms dotnet 9.0.202
csharp 3.cs 109ms 2.9ms 12.9MB 97ms 0ms dotnet/aot 9.0.202
csharp 2.cs 112ms 2.1ms 36.9MB 90ms 10ms dotnet 9.0.202
csharp 1.cs 137ms 0.2ms 33.8MB 120ms 10ms dotnet 9.0.202
csharp 3.cs 169ms 7.1ms 33.9MB 143ms 10ms dotnet 9.0.202
csharp 1.cs 176ms 4.5ms 13.3MB 160ms 0ms dotnet/aot 9.0.202
csharp 1.cs 567ms 2.4ms 23.9MB 550ms 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 360ms 8.1ms 681.4MB 397ms 80ms kotlin/jvm 21
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
csharp 1.cs 1338ms 54ms 140.0MB 1567ms 160ms mono 6.12.0
kotlin 1-m.kt 1499ms 4.3ms 134.5MB 2283ms 337ms kotlin/native 1.8.21

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 130ms 2.8ms 208.5MB 157ms 33ms kotlin/jvm 21
csharp 2.cs 138ms 6.8ms 57.0MB 110ms 30ms dotnet/aot 9.0.202
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
kotlin 1-m.kt 312ms 4.3ms 38.5MB 460ms 70ms 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 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
kotlin 1n.kt 413ms 3.0ms 2.6MB 403ms 0ms kotlin/native 1.8.21
csharp 8.cs 427ms 7.6ms 27.6MB 403ms 7ms dotnet 9.0.202
kotlin 1.kt 447ms 1.8ms 49.3MB 490ms 20ms kotlin/jvm 21
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
kotlin 1n.kt 45ms 1.9ms 2.6MB 40ms 0ms kotlin/native 1.8.21
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
kotlin 1-m.kt 120ms 0.4ms 49.6MB 163ms 20ms kotlin/jvm 21
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
csharp 2.cs 1866ms 4.1ms 29.5MB 1850ms 0ms mono 6.12.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
csharp 2.cs 483ms 2.3ms 21.1MB 467ms 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 3225ms 18ms 13.9MB 3120ms 100ms dotnet/aot 9.0.202
csharp 1.cs 3546ms 1.9ms 38.0MB 3570ms 110ms dotnet 9.0.202
kotlin 1.kt 3753ms 45ms 355.1MB 4627ms 110ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 5.5MB 6320ms 267ms kotlin/native 1.8.21
kotlin 2n.kt timeout 0.0ms 6.3MB 5000ms 167ms kotlin/native 1.8.21

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 759ms 2.6ms 13.4MB 720ms 27ms dotnet/aot 9.0.202
csharp 1.cs 983ms 4.6ms 37.9MB 1067ms 37ms dotnet 9.0.202
kotlin 1-m.kt 983ms 29ms 355.6MB 1763ms 100ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 5.5MB 6270ms 273ms kotlin/native 1.8.21
kotlin 2n.kt timeout 0.0ms 6.3MB 5010ms 150ms 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 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
kotlin 1.kt timeout 0.0ms 171.2MB 5393ms 43ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 277.0MB 5430ms 493ms 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 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
kotlin 1-m.kt 807ms 4.6ms 134.0MB 1223ms 40ms kotlin/jvm 21
kotlin 1n.kt 3182ms 11ms 63.1MB 3923ms 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 2851ms 10.0ms 13.1MB 2817ms 20ms dotnet/aot 9.0.202
csharp 1.cs 2967ms 19ms 35.6MB 3027ms 43ms dotnet 9.0.202
kotlin 1.kt 3130ms 52ms 233.8MB 4123ms 70ms kotlin/jvm 21

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 720ms 4.3ms 13.0MB 700ms 7ms dotnet/aot 9.0.202
kotlin 1-m.kt 984ms 32ms 232.4MB 1807ms 57ms kotlin/jvm 21
csharp 1.cs 1005ms 7.9ms 35.8MB 1087ms 23ms dotnet 9.0.202

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
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
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
csharp 3-m.cs 354ms 10ms 24.9MB 1193ms 7ms mono 6.12.0