C# VS Go benchmarks

Current benchmark data was generated on Wed Feb 08 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz (Model 85)

* -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 1718ms 34ms 303.4MB 1583ms 217ms dotnet/aot 7.0.102
csharp 1.cs 1977ms 81ms 433.3MB 1717ms 333ms dotnet 7.0.102
csharp 1.cs 2754ms 23ms 106.2MB 3340ms 227ms mono 6.12.0
go 1.go 3847ms 17ms 45.6MB 5503ms 83ms go 1.19.5
go 1.go timeout 0.0ms 39.4MB 4970ms 7ms tinygo 0.25.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 173ms 7.2ms 60.2MB 137ms 30ms dotnet/aot 7.0.102
csharp 1.cs 190ms 1.8ms 46.1MB 167ms 13ms mono 6.12.0
go 1.go 324ms 2.4ms 8.3MB 417ms 3ms go 1.19.5
csharp 1.cs 345ms 16ms 151.8MB 240ms 73ms dotnet 7.0.102
go 1.go 438ms 0.7ms 5.9MB 423ms 0ms tinygo 0.25.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 984ms 210ms 13.6MB 1910ms 0ms go 1.19.5
go 1.go 2170ms 13ms 256.7MB 2087ms 63ms tinygo 0.25.0
csharp 1.cs timeout 0.0ms 159.0MB 9133ms 113ms dotnet 7.0.102
csharp 1.cs timeout 0.0ms 65.9MB 9127ms 70ms dotnet/aot 7.0.102

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 73ms 13ms 5.4MB 117ms 0ms go 1.19.5
go 1.go 346ms 2.1ms 65.6MB 307ms 23ms tinygo 0.25.0
csharp 1-m.cs 374ms 8.9ms 54.9MB 623ms 27ms dotnet/aot 7.0.102
csharp 1-m.cs 729ms 80ms 145.2MB 1137ms 70ms dotnet 7.0.102

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 197ms 3.5ms 8.3MB 180ms 3ms go 1.19.5
csharp 1.cs timeout 0.0ms 112.0MB 4923ms 37ms dotnet 7.0.102
csharp 1.cs timeout 0.0ms 22.6MB 4990ms 0ms dotnet/aot 7.0.102

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 58ms 1.3ms 8.9MB 50ms 0ms go 1.19.5
csharp 1.cs 1006ms 2.0ms 19.3MB 990ms 10ms dotnet/aot 7.0.102
csharp 1.cs 1148ms 0.6ms 109.6MB 1083ms 37ms dotnet 7.0.102

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3-m.go 251ms 0.7ms 2.9MB 450ms 0ms go 1.19.5
csharp 5-m.cs 372ms 28ms 67.2MB 583ms 107ms dotnet/aot 7.0.102
csharp 5-m.cs 590ms 61ms 156.5MB 887ms 137ms dotnet 7.0.102
csharp 5-m.cs 645ms 15ms 60.3MB 1077ms 137ms mono 6.12.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 32ms 0.4ms 2.9MB 40ms 0ms go 1.19.5
csharp 5.cs 73ms 29ms 24.4MB 77ms 27ms dotnet/aot 7.0.102
csharp 5.cs 107ms 3.8ms 34.1MB 137ms 23ms mono 6.12.0
csharp 5.cs 163ms 6.8ms 111.5MB 130ms 70ms dotnet 7.0.102

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 1.9ms 0.9ms 0.2MB 0ms 0ms tinygo 0.25.0
go 1.go 3.4ms 0.5ms 2.9MB 0ms 0ms go 1.19.5
csharp 1.cs 8.0ms 0.9ms 10.1MB 0ms 0ms dotnet/aot 7.0.102
csharp 1.cs 24ms 1.3ms 23.6MB 10ms 2ms mono 6.12.0
csharp 1.cs 91ms 4.1ms 101.5MB 30ms 32ms dotnet 7.0.102

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 207ms 4.6ms 58.5MB 300ms 50ms go 1.19.5
go 1-m.go 699ms 31ms 164.2MB 677ms 470ms go 1.19.5
go 2-m.go 837ms 102ms 180.4MB 803ms 630ms go 1.19.5
csharp 2-http2.cs 1129ms 7.3ms 198.2MB 1167ms 170ms dotnet 7.0.102
csharp 2.cs 1150ms 43ms 235.2MB 973ms 657ms dotnet 7.0.102
csharp 1-m.cs 1248ms 24ms 252.7MB 1233ms 663ms dotnet 7.0.102
csharp 2-http3.cs 2141ms 126ms 363.6MB 2693ms 497ms dotnet 7.0.102

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 49ms 1.1ms 25.1MB 47ms 13ms go 1.19.5
go 2.go 131ms 41ms 39.1MB 93ms 50ms go 1.19.5
go 1.go 157ms 5.5ms 37.1MB 103ms 90ms go 1.19.5
csharp 2.cs 607ms 25ms 158.8MB 497ms 173ms dotnet 7.0.102
csharp 1.cs 697ms 40ms 172.1MB 660ms 237ms dotnet 7.0.102
csharp 2-http2.cs 973ms 6.4ms 165.2MB 897ms 153ms dotnet 7.0.102
csharp 2-http3.cs 1082ms 25ms 178.1MB 1060ms 167ms dotnet 7.0.102

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 83ms 6.6ms 42.1MB 60ms 17ms go 1.19.5
go 1.go 213ms 3.5ms 18.8MB 197ms 3ms go 1.19.5
csharp 2.cs 502ms 7.6ms 145.0MB 407ms 60ms dotnet 7.0.102
csharp 1.cs 807ms 5.6ms 217.9MB 770ms 117ms dotnet 7.0.102

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 483ms 20ms 182.5MB 440ms 133ms go 1.19.5
go 1.go 1288ms 8.1ms 105.2MB 1253ms 83ms go 1.19.5
csharp 2.cs 2278ms 139ms 342.6MB 2337ms 183ms dotnet 7.0.102
csharp 1.cs 3460ms 49ms 859.9MB 3380ms 483ms dotnet 7.0.102

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 1218ms 5.5ms 53.5MB 1800ms 23ms dotnet/aot 7.0.102
csharp 6-m.cs 1586ms 11ms 144.3MB 2663ms 63ms dotnet 7.0.102
go 7-m.go 1633ms 7.4ms 41.6MB 3007ms 40ms go 1.19.5
csharp 6-m.cs 2173ms 107ms 71.3MB 3497ms 33ms mono 6.12.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 188ms 6.5ms 42.3MB 210ms 30ms dotnet/aot 7.0.102
go 7-m.go 271ms 4.2ms 25.3MB 420ms 20ms go 1.19.5
csharp 6.cs 326ms 31ms 53.5MB 440ms 17ms mono 6.12.0
csharp 6.cs 355ms 8.1ms 132.9MB 387ms 67ms dotnet 7.0.102

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 165ms 1.5ms 10.2MB 160ms 0ms dotnet/aot 7.0.102
go 3.go 195ms 4.6ms 0.3MB 183ms 0ms tinygo 0.25.0
go 3.go 201ms 2.4ms 3.4MB 187ms 0ms go 1.19.5
csharp 2.cs 247ms 7.9ms 27.3MB 227ms 3ms mono 6.12.0
csharp 2.cs 272ms 2.4ms 102.2MB 213ms 27ms dotnet 7.0.102
csharp 1.cs 1879ms 12ms 56.1MB 1850ms 27ms dotnet/aot 7.0.102
csharp 1.cs 2048ms 2.1ms 145.7MB 1967ms 67ms dotnet 7.0.102
csharp 1.cs 4010ms 16ms 47.7MB 3953ms 50ms mono 6.12.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 492ms 13ms 10.1MB 483ms 0ms dotnet/aot 7.0.102
csharp 2.cs 535ms 11ms 101.9MB 483ms 30ms dotnet 7.0.102
go 3.go 566ms 1.0ms 0.3MB 553ms 0ms tinygo 0.25.0
go 3.go 589ms 3.6ms 3.4MB 573ms 0ms go 1.19.5
csharp 2.cs 634ms 5.8ms 25.3MB 617ms 3ms mono 6.12.0
csharp 1.cs timeout 0.0ms 146.6MB 4930ms 57ms dotnet 7.0.102
csharp 1.cs timeout 0.0ms 56.4MB 4970ms 23ms dotnet/aot 7.0.102
csharp 1.cs timeout 0.0ms 47.9MB 4960ms 33ms mono 6.12.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 85ms 0.6ms 8.1MB 80ms 0ms dotnet/aot 7.0.102
go 3.go 99ms 0.4ms 0.0MB 90ms 0ms tinygo 0.25.0
go 3.go 108ms 3.8ms 4.1MB 100ms 0ms go 1.19.5
csharp 2.cs 132ms 0.6ms 25.3MB 120ms 0ms mono 6.12.0
csharp 2.cs 190ms 5.7ms 102.2MB 127ms 30ms dotnet 7.0.102
csharp 1.cs timeout 0.0ms 137.6MB 4907ms 57ms dotnet 7.0.102
csharp 1.cs timeout 0.0ms 51.2MB 4953ms 40ms dotnet/aot 7.0.102
csharp 1.cs timeout 0.0ms 29.4MB 4967ms 0ms mono 6.12.0

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 811ms 21ms 152.7MB 723ms 67ms dotnet 7.0.102
csharp 3.cs 4091ms 2.9ms 109.3MB 4027ms 33ms dotnet 7.0.102
csharp 1.cs 4129ms 38ms 111.2MB 4033ms 40ms dotnet 7.0.102
csharp 3.cs 4181ms 64ms 17.4MB 4173ms 0ms dotnet/aot 7.0.102
go 1.go 4741ms 38ms 7.4MB 4710ms 3ms go 1.19.5
csharp 1.cs timeout 0.0ms 15.6MB 4987ms 3ms dotnet/aot 7.0.102
csharp 1.cs timeout 0.0ms 26.7MB 4977ms 3ms mono 6.12.0
go 1.go timeout 0.0ms 5.4MB 4977ms 0ms tinygo 0.25.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 180ms 5.5ms 111.5MB 110ms 40ms dotnet 7.0.102
csharp 3.cs 185ms 4.1ms 12.8MB 177ms 3ms dotnet/aot 7.0.102
go 1.go 199ms 1.3ms 2.9MB 190ms 0ms go 1.19.5
csharp 1.cs 265ms 14ms 15.1MB 253ms 0ms dotnet/aot 7.0.102
csharp 1.cs 277ms 2.9ms 108.3MB 213ms 30ms dotnet 7.0.102
csharp 3.cs 307ms 13ms 106.7MB 240ms 37ms dotnet 7.0.102
go 1.go 390ms 1.4ms 0.0MB 380ms 0ms tinygo 0.25.0
csharp 1.cs 887ms 1.3ms 28.1MB 863ms 7ms mono 6.12.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 1053ms 5.7ms 382.4MB 917ms 193ms dotnet/aot 7.0.102
csharp 1.cs 1147ms 32ms 303.2MB 1003ms 183ms dotnet/aot 7.0.102
csharp 2.cs 1283ms 16ms 497.2MB 1037ms 270ms dotnet 7.0.102
csharp 1.cs 1342ms 22ms 501.9MB 1127ms 263ms dotnet 7.0.102
csharp 1.cs 2174ms 53ms 142.9MB 2760ms 160ms mono 6.12.0
go 1.go 2523ms 14ms 38.2MB 3530ms 67ms go 1.19.5
go 2.go 2861ms 21ms 45.1MB 4040ms 80ms go 1.19.5
go 1.go 4946ms 23ms 212.6MB 4880ms 50ms tinygo 0.25.0
go 2.go timeout 0.0ms 51.3MB 4973ms 3ms tinygo 0.25.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 249ms 14ms 141.6MB 183ms 60ms dotnet/aot 7.0.102
csharp 1.cs 308ms 9.8ms 190.9MB 203ms 93ms dotnet/aot 7.0.102
csharp 1.cs 399ms 3.3ms 72.0MB 393ms 33ms mono 6.12.0
csharp 1.cs 444ms 10ms 249.0MB 327ms 103ms dotnet 7.0.102
csharp 2.cs 463ms 4.4ms 208.9MB 367ms 77ms dotnet 7.0.102
go 1.go 535ms 12ms 12.1MB 713ms 20ms go 1.19.5
go 2.go 606ms 2.8ms 13.4MB 837ms 7ms go 1.19.5
go 1.go 864ms 21ms 51.9MB 837ms 7ms tinygo 0.25.0
go 2.go 1659ms 8.8ms 39.3MB 1637ms 7ms tinygo 0.25.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 9.cs 531ms 2.8ms 98.0MB 463ms 33ms dotnet 7.0.102
go 1.go 599ms 3.1ms 2.9MB 587ms 0ms go 1.19.5
csharp 8.cs 686ms 14ms 12.3MB 680ms 0ms dotnet/aot 7.0.102
csharp 8.cs 742ms 6.0ms 99.9MB 673ms 37ms dotnet 7.0.102
go 1.go 839ms 2.3ms 2.0MB 830ms 0ms tinygo 0.25.0
csharp 8.cs 1535ms 1.6ms 25.0MB 1513ms 3ms mono 6.12.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 65ms 1.5ms 2.9MB 50ms 0ms go 1.19.5
csharp 8.cs 78ms 3.2ms 10.0MB 73ms 0ms dotnet/aot 7.0.102
go 1.go 84ms 1.0ms 0.0MB 73ms 0ms tinygo 0.25.0
csharp 9.cs 144ms 2.8ms 98.4MB 83ms 33ms dotnet 7.0.102
csharp 8.cs 172ms 6.9ms 102.3MB 117ms 27ms dotnet 7.0.102
csharp 8.cs 181ms 0.8ms 25.0MB 157ms 3ms mono 6.12.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 758ms 4.2ms 17.9MB 753ms 0ms dotnet/aot 7.0.102
go 2.go 808ms 5.4ms 17.6MB 793ms 0ms tinygo 0.25.0
csharp 2.cs 923ms 3.8ms 109.3MB 860ms 37ms dotnet 7.0.102
go 1.go 986ms 32ms 73.7MB 957ms 17ms go 1.19.5
go 1.go 1060ms 43ms 43.8MB 1027ms 10ms tinygo 0.25.0
csharp 1.cs 1090ms 39ms 71.9MB 1063ms 20ms dotnet/aot 7.0.102
go 2.go 1095ms 9.3ms 20.0MB 1073ms 13ms go 1.19.5
csharp 1.cs 1355ms 47ms 82.5MB 1317ms 23ms mono 6.12.0
csharp 1.cs 1931ms 106ms 158.9MB 1843ms 53ms dotnet 7.0.102
csharp 2.cs 3286ms 22ms 31.9MB 3267ms 7ms mono 6.12.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 142ms 8.0ms 22.2MB 120ms 3ms go 1.19.5
go 1.go 151ms 0.6ms 13.4MB 140ms 0ms tinygo 0.25.0
csharp 1.cs 174ms 11ms 30.5MB 153ms 13ms dotnet/aot 7.0.102
csharp 2.cs 189ms 9.5ms 11.4MB 173ms 0ms dotnet/aot 7.0.102
go 2.go 198ms 10ms 5.6MB 173ms 0ms tinygo 0.25.0
csharp 1.cs 225ms 4.3ms 40.6MB 200ms 7ms mono 6.12.0
go 2.go 259ms 2.0ms 8.0MB 250ms 0ms go 1.19.5
csharp 2.cs 290ms 2.2ms 104.8MB 233ms 23ms dotnet 7.0.102
csharp 1.cs 405ms 14ms 114.9MB 337ms 33ms dotnet 7.0.102
csharp 2.cs 805ms 2.3ms 26.1MB 787ms 3ms mono 6.12.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 1588ms 15ms 8.5MB 1560ms 10ms go 1.19.5
csharp 1.cs timeout 0.0ms 155.9MB 4923ms 147ms dotnet 7.0.102
csharp 1.cs timeout 0.0ms 57.3MB 4960ms 33ms dotnet/aot 7.0.102

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 367ms 3.4ms 8.5MB 350ms 3ms go 1.19.5
csharp 1.cs 1333ms 7.2ms 56.5MB 1290ms 33ms dotnet/aot 7.0.102
csharp 1.cs 1458ms 0.2ms 156.3MB 1413ms 90ms dotnet 7.0.102

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5.cs 3780ms 13ms 600.5MB 3770ms 253ms dotnet 7.0.102
csharp 6.cs 4186ms 22ms 591.0MB 4060ms 253ms dotnet 7.0.102
csharp 6.cs 4329ms 8.4ms 504.8MB 4173ms 210ms dotnet/aot 7.0.102
csharp 5.cs timeout 0.0ms 185.8MB 4950ms 103ms dotnet/aot 7.0.102
go 3.go timeout 0.0ms 110.6MB 4970ms 127ms go 1.19.5
go 3.go timeout 0.0ms 120.5MB 4950ms 30ms tinygo 0.25.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 461ms 10ms 73.9MB 433ms 27ms dotnet/aot 7.0.102
csharp 5.cs 575ms 9.7ms 168.1MB 487ms 70ms dotnet 7.0.102
csharp 6.cs 669ms 16ms 163.9MB 573ms 70ms dotnet 7.0.102
csharp 5.cs 841ms 9.2ms 72.1MB 797ms 43ms dotnet/aot 7.0.102
go 3.go 2924ms 14ms 18.5MB 2903ms 30ms go 1.19.5
go 3.go timeout 0.0ms 30.0MB 4983ms 0ms tinygo 0.25.0

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 0-ffi.go 185ms 2.9ms 10.1MB 170ms 7ms go 1.19.5
csharp 1.cs timeout 0.0ms 150.9MB 4957ms 53ms dotnet 7.0.102
csharp 1.cs timeout 0.0ms 60.0MB 4970ms 23ms dotnet/aot 7.0.102

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 0-ffi.go 61ms 3.2ms 9.6MB 50ms 0ms go 1.19.5
csharp 1.cs 1271ms 11ms 57.9MB 1233ms 33ms dotnet/aot 7.0.102
csharp 1.cs 1465ms 51ms 148.9MB 1420ms 63ms dotnet 7.0.102

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 2549ms 81ms 13.6MB 4870ms 13ms dotnet/aot 7.0.102
go 4-m.go 2681ms 27ms 4.9MB 5153ms 3ms go 1.19.5
csharp 3-m.cs 4653ms 9.5ms 106.8MB 8870ms 43ms dotnet 7.0.102
csharp 3.cs timeout 0.0ms 27.1MB 9733ms 10ms mono 6.12.0
go 1.go timeout 0.0ms 5.4MB 4983ms 3ms go 1.19.5
go 1.go timeout 0.0ms 2.4MB 4983ms 0ms tinygo 0.25.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 649ms 1.7ms 12.2MB 1230ms 0ms dotnet/aot 7.0.102
go 4-m.go 674ms 7.1ms 3.4MB 1277ms 0ms go 1.19.5
go 1.go 1330ms 2.8ms 2.9MB 1323ms 0ms go 1.19.5
csharp 3-m.cs 1335ms 16ms 104.6MB 2427ms 30ms dotnet 7.0.102
csharp 3-m.cs 3239ms 166ms 29.5MB 6070ms 7ms mono 6.12.0
go 1.go timeout 0.0ms 0.0MB 4983ms 0ms tinygo 0.25.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 182ms 3.8ms 2.9MB 313ms 0ms go 1.19.5
csharp 3-m.cs 186ms 7.1ms 12.2MB 320ms 3ms dotnet/aot 7.0.102
go 1.go 336ms 2.1ms 2.9MB 327ms 0ms go 1.19.5
csharp 3-m.cs 440ms 7.6ms 104.3MB 670ms 33ms dotnet 7.0.102
csharp 3-m.cs 820ms 6.1ms 29.6MB 1540ms 0ms mono 6.12.0
go 1.go 1953ms 7.3ms 0.0MB 1940ms 0ms tinygo 0.25.0