Ma praticamente un oggetto quando viene eliminato?
Non è possibile saperlo, in quanto la garbage collection non è deterministica; accontentati di sapere che a un certo punto interverrà

So che il garbage collection periodicamente controlla gli elementi da eliminare, ma come faccio a dire quali sono?
Semplicemnte basta che nessuna variabile punti più all'oggetto?
Il GC traccia quali sono in memoria gli oggetti non più referenziati e quindi non più utilizzati.

Quando il garbage cancella l'oggetto, che cosa invoca in pratica? Dispose, Finalize o il distruttore ~Classe?
Invoca il metodo Finalize (VB.NET) o ~Classe (C#)

Per predisporre un oggetto per la garbage collection è necessario chiamare il metodo Dispose per tutti gli oggetti utilizzati che lo espongono (e che quindi implementano l'interfaccia IDisposable). Nel metodo Dispose vengono rilasciate sia le risorse managed che unmanaged utilizzate dall'oggetto, nel Finalize _solo_ quelle unmanaged.