The memory will NOT be freed immediately by setting it to NULL. The memory will be marked for garbage collection. The .Net GC scheme is somewhat efficient. If you are concerned, you can force a a GC cycle: See this stack overflow article on the yin/yang of this.
If it sets unused, .Net will not do anything. That is to say, if you don't specifically "nullify" the reference, .Net has no reason to expect the object won't be needed (immediately) at some point. If you need it and .Net "temporarily removed it from memory", it will need to recreate it somehow, using information about the state of your class...the obvious choice for the restoration information is the class itself. So removing it is not really an option.
Offloading it through various stages of slower-but-larger memory access is usually the strategy used in modern computers: (1) Store memory in local on chip memory cache(s) for most recent data/program used. (2) Store memory in off chip memory chips. (3) Store memory in virtualized media (e.g. hard drive).
At the end of the day, you probably know best when to nullify the reference and the framework knows best about when/where to store the memory for your objects. There are exceptions, such as game programming, where the GC mechanism can cause hiccups. But in general, the system does well as long as you do.
Was this helpful?