Setting to null (Nothing in VB) will be enough, as it marks the memory space ready for garbage collection, and then garbage collector will collects the garbage automatically once it wakes up.
If you want to force the garbage collection (not a best practice) you can call GC.Collect.
Memory Release
The garbage collector's optimizing engine determines the best time to perform a collection based on the allocations being made. When the garbage collector performs a collection, it releases the memory for objects that are no longer being used by the application. It determines which objects are no longer being used by examining the application's roots. An application's roots include static fields, local variables on a thread's stack, CPU registers, GC handles, and the finalize queue. Each root either refers to an object on the managed heap or is set to null. The garbage collector can ask the rest of the runtime for these roots. The garbage collector uses this list to create a graph that contains all the objects that are reachable from the roots.