I wonder how much of the advice is still important with the improvements .NET GC has received over the decades [1] [2] [1] http://scottdorman.github.io/2008/11/07/clr-4.0-garbage-coll... [2] https://blogs.msdn.microsoft.com/dotnet/2012/07/20/the-net-f...
The optimizations improved GC performance in general reducing latency, but, the advice in the article is still good. One thing that may seem dated is the concern with Finalization, which is still a valid concern, but nowadays there are very few cases in which one needs to create a finalizer for their types.
Yes, they are all good tips. You will get the best performance if you don't touch memory at all, but that's not practical. There is always a trade-off: don't create large long-living objects mutable split them into smaller ones? But then you have more long lived objects.