8) Add Memory space randomization. So that when your application starts its memory space fingerprint looks different than last time. Making it hard for exploit code to work in .NET framework applications (This should be supported by the runtime).
The GC is already collecting data if there is time and depending on how full the memory already is etc. This does mean also some randomization.
If you do some interop and a native method relies on the location of an object in memory you have to pin it in C#. If you are not doing that the GC moves it around as he wants and the native method gets the wrong piece of memory.