C# VS Kotlin benchmarks

Current benchmark data was generated on Mon Apr 14 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 513ms 4.4ms 577.8MB 603ms 107ms kotlin/jvm 21
csharp 1.cs 959ms 8.6ms 205.9MB 957ms 147ms dotnet 9.0.203
csharp 1.cs 974ms 8.9ms 178.1MB 980ms 130ms dotnet/aot 9.0.203
csharp 1.cs 1663ms 23ms 105.5MB 1877ms 200ms mono 6.12.0
kotlin 1.kt 4515ms 38ms 146.1MB 4703ms 67ms kotlin/native 2.1.20

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 122ms 4.1ms 33.2MB 90ms 30ms dotnet/aot 9.0.203
kotlin 1.kt 126ms 1.8ms 161.2MB 150ms 37ms kotlin/jvm 21
csharp 1.cs 143ms 1.7ms 42.2MB 120ms 13ms mono 6.12.0
csharp 1.cs 195ms 2.0ms 49.9MB 157ms 40ms dotnet 9.0.203
kotlin 1.kt 318ms 32ms 17.9MB 327ms 7ms kotlin/native 2.1.20

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 2-m.kt 2184ms 180ms 244.6MB 8133ms 130ms kotlin/jvm 21
kotlin 1.kt 2217ms 57ms 220.3MB 3067ms 70ms kotlin/jvm 21
csharp 1-m.cs 2219ms 89ms 50.5MB 7740ms 67ms dotnet/aot 9.0.203
csharp 1-m.cs 2823ms 229ms 66.1MB 9820ms 107ms dotnet 9.0.203
kotlin 2-m.kt 4498ms 30ms 21.5MB 14707ms 610ms kotlin/native 2.1.20
kotlin 1.kt timeout 0.0ms 17.4MB 5523ms 30ms kotlin/native 2.1.20

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1-m.cs 158ms 13ms 19.0MB 460ms 13ms dotnet/aot 9.0.203
kotlin 2-m.kt 253ms 6.4ms 21.3MB 847ms 40ms kotlin/native 2.1.20
csharp 1-m.cs 310ms 14ms 37.2MB 877ms 20ms dotnet 9.0.203
kotlin 1.kt 409ms 11ms 17.4MB 420ms 10ms kotlin/native 2.1.20
kotlin 1-m.kt 492ms 12ms 77.2MB 1140ms 43ms kotlin/jvm 21
kotlin 2-m.kt 969ms 186ms 109.2MB 3360ms 83ms kotlin/jvm 21

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 4175ms 1.9ms 18.3MB 4147ms 10ms dotnet/aot 9.0.203
csharp 1.cs 4964ms 20ms 37.6MB 4937ms 23ms dotnet 9.0.203

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 690ms 1.2ms 14.8MB 670ms 0ms dotnet/aot 9.0.203
csharp 1.cs 864ms 4.6ms 33.9MB 843ms 13ms dotnet 9.0.203

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5-m.cs 131ms 0.3ms 26.3MB 350ms 103ms dotnet/aot 9.0.203
csharp 5-m.cs 189ms 3.4ms 39.1MB 467ms 123ms dotnet 9.0.203
csharp 5-m.cs 241ms 13ms 51.4MB 660ms 123ms mono 6.12.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5-m.cs 25ms 0.4ms 15.4MB 37ms 10ms dotnet/aot 9.0.203
csharp 5-m.cs 60ms 1.1ms 36.9MB 80ms 20ms dotnet 9.0.203
csharp 5-m.cs 70ms 2.0ms 30.9MB 103ms 20ms mono 6.12.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1.kt 2.1ms 0.1ms 3.1MB 0ms 0ms kotlin/native 2.1.20
csharp 1.cs 9.0ms 3.9ms 6.8MB 0ms 0ms dotnet/aot 9.0.203
csharp 1.cs 31ms 0.6ms 21.3MB 20ms 0ms mono 6.12.0
csharp 1.cs 35ms 1.3ms 26.1MB 20ms 2ms dotnet 9.0.203
kotlin 1.kt 67ms 2.3ms 47.7MB 82ms 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 531ms 29ms 108.5MB 717ms 143ms dotnet 9.0.203
csharp 2-m.cs 602ms 34ms 143.7MB 717ms 493ms dotnet 9.0.203
csharp 2-http3.cs 676ms 19ms 144.2MB 1123ms 257ms dotnet 9.0.203
csharp 1-m.cs 701ms 26ms 161.9MB 1110ms 653ms dotnet 9.0.203
kotlin 1.kt timeout 0.0ms 405.5MB 16143ms 2733ms kotlin/jvm 21
kotlin 2.kt timeout 0.0ms 458.9MB 15747ms 2687ms kotlin/jvm 21

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2-m.cs 345ms 7.5ms 87.6MB 383ms 187ms dotnet 9.0.203
csharp 1-m.cs 380ms 5.4ms 97.2MB 513ms 230ms dotnet 9.0.203
csharp 2-http2.cs 458ms 8.1ms 85.7MB 510ms 80ms dotnet 9.0.203
csharp 2-http3.cs 491ms 5.5ms 93.5MB 577ms 113ms dotnet 9.0.203
kotlin 1-m.kt 2223ms 205ms 254.3MB 6403ms 687ms kotlin/jvm 21
kotlin 2-m.kt 2233ms 250ms 249.5MB 6100ms 650ms 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 305ms 1.6ms 68.8MB 273ms 27ms dotnet 9.0.203
csharp 1.cs 761ms 68ms 143.7MB 783ms 83ms dotnet 9.0.203
kotlin 1-m.kt 773ms 88ms 172.2MB 2063ms 87ms kotlin/jvm 21

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 1522ms 33ms 233.6MB 1670ms 93ms dotnet 9.0.203
kotlin 1-m.kt 1862ms 58ms 671.6MB 4417ms 173ms kotlin/jvm 21
csharp 1.cs 2653ms 29ms 735.8MB 3230ms 400ms dotnet 9.0.203

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6-m.cs 445ms 3.9ms 46.0MB 1197ms 17ms dotnet/aot 9.0.203
csharp 6-m.cs 822ms 47ms 69.3MB 1833ms 30ms dotnet 9.0.203
csharp 6-m.cs 1007ms 15ms 64.5MB 2930ms 30ms 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 93ms 0.8ms 36.5MB 160ms 17ms dotnet/aot 9.0.203
csharp 6-m.cs 197ms 3.9ms 58.2MB 383ms 17ms mono 6.12.0
csharp 6.cs 197ms 3.4ms 57.7MB 260ms 30ms dotnet 9.0.203

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 94ms 1.9ms 9.8MB 80ms 0ms dotnet/aot 9.0.203
csharp 2.cs 147ms 3.1ms 22.7MB 133ms 0ms mono 6.12.0
kotlin 2.kt 171ms 2.7ms 12.4MB 173ms 0ms kotlin/native 2.1.20
kotlin 1-m.kt 200ms 3.0ms 96.7MB 333ms 27ms kotlin/jvm 21
kotlin 2-m.kt 212ms 8.2ms 105.3MB 453ms 40ms kotlin/jvm 21
csharp 2.cs 251ms 4.8ms 29.4MB 233ms 7ms dotnet 9.0.203
kotlin 1.kt 357ms 2.2ms 12.5MB 363ms 3ms kotlin/native 2.1.20
csharp 1.cs 1050ms 13ms 13.3MB 1033ms 3ms dotnet/aot 9.0.203
csharp 1.cs 1311ms 11ms 32.9MB 1293ms 20ms dotnet 9.0.203
csharp 1.cs 3329ms 33ms 43.6MB 3287ms 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 262ms 0.8ms 9.6MB 250ms 0ms dotnet/aot 9.0.203
kotlin 2-m.kt 325ms 2.7ms 215.9MB 557ms 50ms kotlin/jvm 21
kotlin 1.kt 344ms 2.7ms 204.8MB 463ms 40ms kotlin/jvm 21
csharp 2.cs 362ms 2.4ms 22.7MB 350ms 0ms mono 6.12.0
csharp 2.cs 402ms 3.7ms 29.5MB 387ms 7ms dotnet 9.0.203
kotlin 2.kt 476ms 6.0ms 12.6MB 507ms 3ms kotlin/native 2.1.20
kotlin 1.kt 1043ms 15ms 12.6MB 1080ms 3ms kotlin/native 2.1.20
csharp 1.cs 3120ms 25ms 13.6MB 3103ms 10ms dotnet/aot 9.0.203
csharp 1.cs 3611ms 58ms 32.8MB 3597ms 17ms dotnet 9.0.203
csharp 1.cs timeout 0.0ms 45.7MB 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 52ms 1.4ms 9.6MB 40ms 0ms dotnet/aot 9.0.203
kotlin 2.kt 94ms 0.7ms 12.8MB 87ms 3ms kotlin/native 2.1.20
csharp 2.cs 96ms 2.2ms 23.0MB 83ms 0ms mono 6.12.0
kotlin 1.kt 122ms 2.7ms 12.9MB 117ms 0ms kotlin/native 2.1.20
kotlin 1-m.kt 159ms 1.4ms 92.7MB 320ms 20ms kotlin/jvm 21
csharp 2.cs 164ms 4.7ms 29.3MB 143ms 7ms dotnet 9.0.203
kotlin 2-m.kt 167ms 2.2ms 98.3MB 350ms 37ms kotlin/jvm 21
csharp 1.cs 1615ms 6.7ms 32.6MB 1600ms 13ms dotnet 9.0.203
csharp 1.cs 1819ms 4.9ms 28.8MB 1803ms 0ms mono 6.12.0
csharp 1.cs 1826ms 3.1ms 13.1MB 1810ms 0ms dotnet/aot 9.0.203

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 4.cs 333ms 3.1ms 37.3MB 313ms 10ms dotnet 9.0.203
csharp 2.cs 520ms 21ms 39.7MB 497ms 10ms dotnet 9.0.203
csharp 1.cs 2044ms 11ms 36.2MB 2020ms 10ms dotnet 9.0.203
csharp 3.cs 2457ms 8.9ms 36.5MB 2437ms 10ms dotnet 9.0.203
csharp 3.cs 2526ms 11ms 16.3MB 2510ms 0ms dotnet/aot 9.0.203
csharp 1.cs 3567ms 3.4ms 16.2MB 3550ms 0ms dotnet/aot 9.0.203
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 78ms 1.9ms 34.4MB 57ms 10ms dotnet 9.0.203
csharp 2.cs 111ms 1.9ms 36.9MB 90ms 10ms dotnet 9.0.203
csharp 3.cs 117ms 1.5ms 13.0MB 103ms 0ms dotnet/aot 9.0.203
csharp 1.cs 139ms 3.7ms 33.4MB 117ms 10ms dotnet 9.0.203
csharp 1.cs 159ms 2.4ms 13.6MB 143ms 0ms dotnet/aot 9.0.203
csharp 3.cs 161ms 0.4ms 33.9MB 140ms 10ms dotnet 9.0.203
csharp 1.cs 571ms 9.1ms 23.3MB 557ms 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 391ms 4.1ms 682.5MB 453ms 93ms kotlin/jvm 21
csharp 2.cs 540ms 13ms 119.9MB 497ms 83ms dotnet/aot 9.0.203
csharp 1.cs 601ms 11ms 145.0MB 553ms 110ms dotnet/aot 9.0.203
csharp 2.cs 682ms 13ms 136.3MB 630ms 93ms dotnet 9.0.203
csharp 1.cs 702ms 20ms 168.5MB 643ms 127ms dotnet 9.0.203
csharp 1.cs 1284ms 31ms 144.0MB 1490ms 167ms mono 6.12.0
kotlin 1.kt 2170ms 19ms 88.8MB 2273ms 40ms kotlin/native 2.1.20

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 132ms 3.0ms 57.9MB 107ms 30ms dotnet/aot 9.0.203
csharp 1.cs 155ms 2.9ms 73.8MB 123ms 50ms dotnet/aot 9.0.203
kotlin 1-m.kt 163ms 0.8ms 209.4MB 213ms 50ms kotlin/jvm 21
csharp 2.cs 264ms 3.0ms 73.1MB 230ms 37ms dotnet 9.0.203
csharp 1.cs 267ms 2.8ms 69.3MB 240ms 33ms mono 6.12.0
csharp 1.cs 277ms 3.0ms 89.8MB 247ms 53ms dotnet 9.0.203
kotlin 1.kt 426ms 7.1ms 25.7MB 437ms 10ms kotlin/native 2.1.20

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1n.kt 352ms 1.7ms 3.5MB 340ms 0ms kotlin/native 2.1.20
csharp 9.cs 360ms 2.9ms 27.6MB 340ms 7ms dotnet 9.0.203
csharp 8.cs 371ms 1.0ms 9.9MB 360ms 0ms dotnet/aot 9.0.203
csharp 8.cs 419ms 1.8ms 27.4MB 400ms 3ms dotnet 9.0.203
kotlin 1.kt 448ms 1.3ms 49.3MB 493ms 17ms kotlin/jvm 21
csharp 8.cs 1254ms 9.8ms 22.8MB 1240ms 0ms mono 6.12.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
kotlin 1n.kt 39ms 0.9ms 3.5MB 30ms 0ms kotlin/native 2.1.20
csharp 8.cs 46ms 1.4ms 9.9MB 30ms 0ms dotnet/aot 9.0.203
csharp 9.cs 93ms 4.5ms 27.6MB 70ms 7ms dotnet 9.0.203
csharp 8.cs 99ms 8.1ms 27.6MB 80ms 3ms dotnet 9.0.203
kotlin 1-m.kt 126ms 3.5ms 49.4MB 173ms 20ms kotlin/jvm 21
csharp 8.cs 162ms 0.8ms 20.9MB 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 316ms 7.0ms 78.7MB 300ms 3ms dotnet/aot 9.0.203
csharp 1.cs 340ms 5.0ms 96.2MB 313ms 13ms dotnet 9.0.203
csharp 2.cs 395ms 3.2ms 17.6MB 380ms 0ms dotnet/aot 9.0.203
csharp 2.cs 398ms 8.9ms 35.5MB 377ms 10ms dotnet 9.0.203
csharp 1.cs 556ms 7.3ms 83.9MB 533ms 10ms mono 6.12.0
csharp 2.cs 1871ms 22ms 31.1MB 1857ms 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 0.5ms 24.9MB 50ms 0ms dotnet/aot 9.0.203
csharp 1.cs 96ms 1.4ms 42.5MB 73ms 10ms dotnet 9.0.203
csharp 2.cs 102ms 2.1ms 11.9MB 90ms 0ms dotnet/aot 9.0.203
csharp 2.cs 128ms 1.1ms 30.0MB 110ms 10ms dotnet 9.0.203
csharp 1.cs 146ms 2.8ms 38.1MB 133ms 0ms mono 6.12.0
csharp 2.cs 483ms 2.6ms 21.1MB 470ms 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 3248ms 11ms 14.0MB 3150ms 93ms dotnet/aot 9.0.203
csharp 1.cs 3556ms 47ms 38.4MB 3577ms 123ms dotnet 9.0.203
kotlin 1.kt 3792ms 49ms 385.9MB 4713ms 107ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 27.0MB 4077ms 1520ms kotlin/native 2.1.20
kotlin 2n.kt timeout 0.0ms 30.4MB 5163ms 130ms kotlin/native 2.1.20

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 761ms 1.1ms 13.5MB 720ms 27ms dotnet/aot 9.0.203
csharp 1.cs 985ms 2.4ms 37.8MB 1070ms 43ms dotnet 9.0.203
kotlin 1-m.kt 992ms 27ms 355.5MB 1823ms 100ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 26.6MB 4110ms 1483ms kotlin/native 2.1.20
kotlin 2n.kt timeout 0.0ms 30.9MB 5130ms 163ms kotlin/native 2.1.20

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 1749ms 12ms 417.4MB 1647ms 160ms dotnet/aot 9.0.203
csharp 5.cs 2068ms 11ms 444.0MB 2113ms 183ms dotnet 9.0.203
csharp 6.cs 2696ms 1.7ms 441.1MB 2650ms 167ms dotnet 9.0.203
csharp 5.cs 4282ms 5.1ms 416.9MB 4190ms 147ms dotnet/aot 9.0.203
kotlin 1.kt timeout 0.0ms 173.6MB 5427ms 47ms kotlin/jvm 21
kotlin 1n.kt timeout 0.0ms 226.8MB 5100ms 123ms kotlin/native 2.1.20

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 190ms 1.2ms 46.4MB 163ms 20ms dotnet/aot 9.0.203
csharp 5.cs 283ms 0.3ms 72.7MB 253ms 30ms dotnet 9.0.203
csharp 6.cs 387ms 3.0ms 69.6MB 357ms 30ms dotnet 9.0.203
csharp 5.cs 441ms 3.2ms 48.6MB 417ms 20ms dotnet/aot 9.0.203
kotlin 1-m.kt 856ms 18ms 134.4MB 1317ms 43ms kotlin/jvm 21
kotlin 1n.kt 3255ms 36ms 51.1MB 3353ms 73ms kotlin/native 2.1.20

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 2886ms 59ms 13.3MB 2850ms 27ms dotnet/aot 9.0.203
csharp 1.cs 2941ms 25ms 35.4MB 3007ms 47ms dotnet 9.0.203
kotlin 1.kt 3093ms 47ms 230.3MB 3913ms 63ms kotlin/jvm 21

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 725ms 2.1ms 13.0MB 707ms 3ms dotnet/aot 9.0.203
csharp 1.cs 996ms 4.6ms 35.3MB 1087ms 17ms dotnet 9.0.203
kotlin 1-m.kt 1029ms 38ms 233.4MB 1937ms 63ms kotlin/jvm 21

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 1860ms 1.8ms 10.4MB 7253ms 10ms dotnet/aot 9.0.203
csharp 3-m.cs 1926ms 4.5ms 29.9MB 7353ms 23ms dotnet 9.0.203
csharp 3-m.cs 4693ms 178ms 25.5MB 17890ms 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 494ms 33ms 10.5MB 1787ms 3ms dotnet/aot 9.0.203
csharp 3-m.cs 657ms 23ms 30.0MB 1690ms 10ms dotnet 9.0.203
csharp 3-m.cs 1197ms 19ms 27.2MB 4503ms 13ms 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 1.5ms 10.4MB 450ms 0ms dotnet/aot 9.0.203
csharp 3-m.cs 248ms 8.5ms 28.6MB 463ms 10ms dotnet 9.0.203
csharp 3-m.cs 352ms 13ms 24.8MB 1190ms 10ms mono 6.12.0