The Computer Language
25.01 Benchmarks Game

Go versus C# naot fastest performance

How the programs are written matters! Always look at the source code.

If the fastest programs are * hand-written vector instructions, does the host language matter? You might be more interested in the less optimised programs — more seconds, less gz source code.

fannkuch-redux
  elapsed     Mean or 95% CI
source secs mem gz cpu secs
* C# naot #5 2.16 6,484 1485 8.574
C# naot #2 31.30 6,124 584 31.24—31.42
* C# naot #9 8.11 6,554 1232 32.341
Go #3 8.36 3,846 975 33.351
C# naot #6 10.13 6,734 1075 40.469
C# naot #3 11.02 6,668 1117 43.57—43.65
C# naot #8 44.64 6,173 519 44.631
Go #8 46.15 3,207 500 46.26—46.33
Go 12.27 4,903 906 49.087
Go #2 12.36 16,966 903 49.402
n-body
  elapsed     Mean or 95% CI
source secs mem gz cpu secs
* C# naot #9 3.13 6,447 2480 3.122
* C# naot #4 3.70 6,304 2137 3.700
* C# naot #7 4.75 6,222 1715 3.66—7.59
* C# naot #6 4.77 6,160 1754 3.83—7.22
C# naot 6.40 5,923 1424 6.399
C# naot #0 6.40 5,992 1342 6.399
Go #3 6.39 3,191 1207 6.408
C# naot #3 6.67 6,185 1311 6.666
C# naot #2 6.81 5,865 1339 6.807
C# naot #8 7.02 5,870 1335 7.018
Go 7.02 3,228 1316 7.09—7.27
Go #2 7.04 3,203 1222 7.062
Go #8 9.60 3,191 1224 9.635
spectral-norm
  elapsed     Mean or 95% CI
source secs mem gz cpu secs
* C# naot #5 0.74 8,331 776 2.881
C# naot #8 5.35 6,959 441 5.342
Go #8 5.34 3,838 429 5.356
Go 5.34 4,059 417 5.356
Go #4 1.43 4,174 555 5.693
Go #2 1.51 4,317 674 5.696
C# naot #2 1.46 6,447 1084 5.721
C# naot #3 1.49 6,857 890 5.798
mandelbrot
  elapsed     Mean or 95% CI
source secs mem gz cpu secs
* C# naot #7 2.96 39,080 915 11.738
* C# naot #9 3.76 39,207 822 14.956
* C# naot 3.77 39,244 1980 14.958
Go #4 3.77 37,970 912 15.017
Go #3 3.78 38,101 900 15.033
C# naot #5 4.01 40,976 851 15.891
Go 5.04 35,787 829 20.048
C# naot #8 25.58 6,009 492 25.55—25.66
C# naot #3 6.70 39,530 722 26.539
Go #8 26.70 3,199 500 26.767
Go #2 6.87 35,549 843 27.315
Go #6 6.91 35,119 707 27.481
C# naot #2 47.80 6,349 504 48.03—48.29
fasta
  elapsed     Mean or 95% CI
source secs mem gz cpu secs
C# naot #9 1.16 6,365 1512 1.157
Go 3.74 3,207 1055 3.755
Go #2 1.27 12,644 1405 4.078
Go #3 1.52 5,095 1362 4.095
C# naot #5 1.13 32,113 1702 4.28—4.43
C# naot 1.64 11,018 2113 5.65—5.70
C# naot #8 6.64 8,819 904 6.306
Go #8 11.22 9,052 880 11.54—11.80
k-nucleotide
  elapsed     Mean or 95% CI
source secs mem gz cpu secs
C# naot 3.13 160,223 2046 10.61—10.88
C# naot #6 5.06 158,024 1615 13.07—13.69
Go #7 7.58 168,186 1613 28.83—29.08
Go #3 8.20 150,413 1729 29.98—30.69
Go #6 8.30 150,442 1596 30.22—30.75
Go #4 9.27 144,650 1552 32.00—35.21
C# naot #4 13.17 530,817 1725 45.76—45.89
C# naot #7 47.98 593,002 1449 48.44—48.66
Go #8 61.38 558,379 752 62.37—62.83
C# naot #8 84.18 1,359,630 736 75.65—76.94
reverse-complement
  elapsed     Mean or 95% CI
source secs mem gz cpu secs
C# naot #9 0.56 521,523 2641 1.36—1.40
Go #2 2.22 822,211 614 2.34—2.39
Go #3 2.50 821,985 609 2.62—2.66
C# naot 3.38 637,932 1130 3.40—3.46
Go #6 1.93 1,277,608 1340 3.46—3.52
C# naot #5 2.74 1,026,769 1620 3.766
C# naot #7 1.55 823,681 1312 4.10—4.24
C# naot #6 1.83 1,030,046 1627 4.297
C# naot #3 8.80 1,238,057 934 13.36—13.54
Go #5   Bad Output  
Go   Empty  
binary-trees
  elapsed     Mean or 95% CI
source secs mem gz cpu secs
C# naot #7 6.23 1,141,314 706 17.13—17.87
C# naot #2 6.17 1,118,659 717 17.12—17.84
C# naot #8 17.32 828,428 601 17.32—17.54
C# naot #3 6.69 2,861,916 688 17.91—18.66
C# naot 6.81 2,842,558 668 18.73—19.11
Go #6 27.93 416,195 618 29.32—29.66
Go #2 14.21 635,613 672 56.45—56.55
Go #3 14.90 329,499 806 57.97—58.17
Go #5 14.68 386,056 957 57.76—58.07
Go 32.05 243,114 488 59.81—60.00
Go #7 32.57 241,345 531 61.40—61.53
C# naot #6   Empty  
pidigits
  elapsed     Mean or 95% CI
source secs mem gz cpu secs
* C# naot #6 0.75 7,893 1182 0.746
* Go #4 0.82 6,402 689 0.836
Go 1.15 7,533 715 1.22—1.31
* Go #3 1.17 6,885 610 1.35—1.49
Go #2 1.76 7,823 740 1.90—2.03
Go #6 2.47 10,703 727 2.484
* C# naot #4 4.54 8,004 1135 4.534
Go #7 5.00 10,527 702 5.653
C# naot #7 11.82 10,072 579 8.30—9.36
* C# naot #5 99.08 8,438 990 99.088
regex-redux
  elapsed     Mean or 95% CI
source secs mem gz cpu secs
C# naot #2 1.36 320,348 1881 2.546
Go #5 3.23 297,800 817 5.40—5.44
C# naot 10.72 582,566 641 10.73—10.82
C# naot #5 3.24 596,681 679 10.73—10.79
C# naot #4 9.76 743,420 854 33.02—33.14
Go #4 14.49 349,008 832 35.20—35.71
Go #3 25.15 336,585 836 61.72—63.46
Go 25.79 301,662 749 61.91—62.99
Go

go version go1.23.1 linux/amd64
GOAMD64=v2

C# naot

.NET SDK 9.0.100
Host Version: 9.0.0
Commit: 9d5a6a9aa4

<OutputType>Exe
<TargetFramework>net9.0
<ImplicitUsings>enable
<Nullable>enable
<AllowUnsafeBlocks>true
<ServerGarbageCollection>true
<ConcurrentGarbageCollection>true
<PublishAot>true
<OptimizationPreference>Speed
<IlcInstructionSet>native