Today we're gonna retry two of my few favorite language in associative array and comb sort benchmark (compile and run, not just runtime performance, because development waiting for compilation time also important) like in the past benchmark. For installing DotNet:
wget https://packages.microsoft.com/config/ubuntu/21.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt install apt-transport-https
sudo apt-get update
sudo apt-get install -y dotnet-sdk-6.0 aspnetcore-runtime-6.0
For installing Golang:
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt install -y golang-1.17
Result (best of 3 runs)
cd assoc; time dotnet run
6009354 6009348 611297
36186112 159701682 23370001
CPU: 14.16s Real: 14.41s RAM: 1945904KB
cd assoc; time go run map.go
6009354 6009348 611297
36186112 159701682 23370001
CPU: 14.80s Real: 12.01s RAM: 2305384KB
This is a bit weird, usually I see that Go use less memory but slower, but in this benchmark C# that are using less memory but a bit slower (14.41s vs 12.01s), possibly because the compilation speed also included.
cd num-assoc; time dotnet run
CPU: 2.21s Real: 2.19s RAM: 169208KB
cd num-assoc; time go run comb.go
CPU: 0.46s Real: 0.44s RAM: 83100KB
What if we increase the N from 1 million to 10 million?
cd num-assoc; time dotnet run
CPU: 19.25s Real: 19.16s RAM: 802296KB
cd num-assoc; time go run comb.go
CPU: 4.60s Real: 4.67s RAM: 808940KB
If you want to contribute (if I make mistake when coding the C# or Go version of the algorithm, or if there's more efficient data structure, just fork and create a pull request, and I will redo the benchmark).