Allora un po' di chiarezza che qui si sta facendo molta confusione..
si parla di vb.net o vb6? perchè sono due linguaggi COMPLETAMENTE diversi..
il fatto che la sintassi sia simile non centra nulla..
il .net in generale opera una politica particolare (come il java per riassumere) alle variabili (che si chiamano riferimenti)
in poche parole una variabile esiste (come in tutti i linguaggi oop in generale) all'interno del suo scope, quindi in un ciclo esiste solo nel ciclo e un una sub esiste solo nella sub stessa..
detto questo, all'uscita ad esempio da una sub, la variabile non esiste.. quindi il riferimento non c'è più.. l'oggetto, che ha riferimenti = 0, sarà preda del garbage collector che lo distruggerà..
la dispose, basta vedere l'implementazione negli oggetti net del framework, non fa altro che fare da "distruttore" fittizio.. in pratica marca come distruggibile l'oggetto e fa lo stesso con i sottoggetti contenuti.. Quindi non distrugge effettivamente nulla (quindi quello che dice Vendaval non è del tutto vero)..
l'unica incognita è il tempo del garbage collector che non si azione subito ma quando serve (in teoria)..
in un ciclo di migliaia di iterazioni la costruzione di migliaia di oggetti magari pesanti senza un = nothing o un dispose può (in rari casi) portare al riempimento della memoria virtuale (ma è veramente una caso difficile).
Ciò cmq va a prescindere dall'ignoranza del tipo che risponde alla mail che fa la vode grossa dicendo "se lo dice la microsoft sarà vero" senza studiarsi il perchè..