The Computer Language
24.04 Benchmarks Game

C# .NET versus F# .NET 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
source secs mem gz cpu secs
C# .NET #8 2.24 31,032 1485 8.62
C# .NET #2 29.55 30,632 584 29.53
F# .NET #6 8.38 31,256 1103 32.53
C# .NET #6 8.66 30,828 1075 34.31
C# .NET #9 9.07 31,908 1232 35.94
F# .NET #5 9.85 36,736 927 38.38
C# .NET #3 11.42 30,848 1117 44.84
F# .NET 91.67 50,008 558 96.00
C# .NET #7   Bad Output  
n-body
source secs mem gz cpu secs
C# .NET #9 3.16 29,972 2480 3.15
C# .NET #4 3.78 30,096 2137 3.77
C# .NET #7 4.80 30,216 1715 4.78
C# .NET #6 4.82 30,324 1754 4.81
F# .NET #6 4.98 34,028 1395 4.95
F# .NET #5 5.02 34,036 1363 5.00
C# .NET #3 6.64 31,228 1311 6.63
C# .NET #2 6.83 31,272 1350 6.81
C# .NET #8 6.83 31,272 1339 6.81
F# .NET #4 6.88 34,396 1296 6.87
F# .NET #3 6.91 32,128 1624 6.89
F# .NET #2 7.39 34,268 1387 7.37
C# .NET 7.79 31,348 1424 7.78
F# .NET 7.74 49,688 1272 7.79
spectral-norm
source secs mem gz cpu secs
C# .NET #5 0.95 35,932 776 3.34
C# .NET 5.40 31,236 480 5.38
C# .NET #3 1.56 33,444 890 5.85
F# .NET #4 1.60 36,320 738 6.00
C# .NET #2   Failed  
F# .NET #2   Timed Out  
mandelbrot
source secs mem gz cpu secs
C# .NET 3.22 66,640 1980 12.55
C# .NET #9 3.22 66,616 822 12.56
C# .NET #5 4.04 64,300 851 15.77
C# .NET #3 6.79 64,636 722 26.76
F# .NET #2 7.10 37,972 1054 27.95
C# .NET #2 46.04 31,568 504 46.01
F# .NET #5   Make Error  
F# .NET   Make Error  
F# .NET #6   Make Error  
pidigits
source secs mem gz cpu secs
C# .NET #6 0.97 32,904 1182 0.95
F# .NET #6 0.95 31,608 917 0.95
C# .NET #5 0.93 34,944 990 0.95
C# .NET #4 1.37 33,536 1135 1.35
F# .NET #4 1.36 33,408 887 1.37
C# .NET #7 6.49 53,020 579 7.05
regex-redux
source secs mem gz cpu secs
C# .NET #8 1.38 388,784 1881 2.62
C# .NET 4.58 847,208 641 4.81
F# .NET #2 4.61 852,528 437 4.84
F# .NET #6 1.76 860,688 622 5.17
C# .NET #5 1.96 860,260 679 5.97
F# .NET #7 4.52 1,399,680 610 6.38
C# .NET #4 12.97 960,888 854 44.30
F# .NET   Bad Output  
F# .NET #4   Bad Output  
fasta
source secs mem gz cpu secs
F# .NET #3 1.14 65,632 1361 4.09
F# .NET #4 1.24 95,052 1355 4.61
C# .NET #5 1.49 51,828 1702 5.46
C# .NET 1.87 52,604 2113 6.59
k-nucleotide
source secs mem gz cpu secs
C# .NET 3.02 184,620 2046 10.45
F# .NET #6 3.88 186,720 1913 12.22
C# .NET #6 4.98 188,080 1615 12.69
F# .NET #2 4.84 199,004 1932 16.23
F# .NET #5 4.77 199,008 1964 16.60
F# .NET #3 11.72 1,323,268 1124 25.39
F# .NET #4 10.51 1,321,116 1522 26.82
C# .NET #7 40.57 761,912 1449 41.01
C# .NET #4 11.52 775,588 1725 41.26
F# .NET 24.14 1,073,324 713 86.18
reverse-complement
source secs mem gz cpu secs
C# .NET #8 0.56 730,092 2641 1.32
C# .NET 2.97 798,068 1130 3.12
C# .NET #5 2.63 1,026,424 1620 3.63
C# .NET #6 1.60 1,027,884 1627 3.85
C# .NET #7 1.55 935,720 1312 4.20
C# .NET #3 7.24 1,572,432 934 11.37
F# .NET 37.91 1,964,820 603 39.29
F# .NET #4   Timed Out  
F# .NET #5   Timed Out  
binary-trees
source secs mem gz cpu secs
F# .NET 10.43 1,266,620 517 12.47
C# .NET #7 4.57 1,676,420 706 14.45
C# .NET #2 4.83 1,577,904 717 15.52
C# .NET #3 4.91 1,972,604 688 15.69
F# .NET #7 5.35 1,656,124 527 15.77
C# .NET 5.14 2,050,380 668 16.24
C# .NET

.NET SDK 8.0.204
Host Version: 8.0.4
Commit: 2d7eea2529
<AllowUnsafeBlocks>true
<ServerGarbageCollection>true
<ConcurrentGarbageCollection>true
<PublishAot>false
<OptimizationPreference>Speed
<IlcInstructionSet>native

F# .NET

.NET SDK 8.0.200
Host Version: 8.0.2
Commit: 1381d5ebd2
<ServerGarbageCollection>true
F# 8.0