The using statement maybe used to 'force' the garbage collector to step in and tidy memory immediately.
That's not quite right. The using statement is just a way to release *certain kinds* of resources immediately without having to wait for the GC. Examples include sockets and file handles. If you forget to close these yourself, the .NET garbage collector will eventually run and will eventually close the handles for you, but this provides a way for you to deterministically release those (limited) resources.

Calling Dispose (and using the 'using' pattern), does not make the GC do anything. It's completely separate to the GC. As for the original question, the memory is 'released' as soon as you don't have any live references to it anymore. Whenever the GC runs next it'll be collected. Your job is done.