Grazie mille delle risposte ora mi è tutto un pò più chiaro di come vengono gestire le variabili in vb.net.

Solo che non ho ben capito una cosa su come ottimizzare un programma:
Se io ho per esempio una matrice diciamo "base" dove ogni cella ha dentro un valore di un range di valori (quindi nella matrice base i valori non si ripetono mai) e poi ho un'altra matrice (più grande) sempre dello stesso tipo di quella precedente solo che ogni cella può avere uno qualsiasi dei valori della matrice base (quindi molto probabilmente ci saranno valori che si ripetono) è più conveniente per ottimizzare lo spazio occupato dalla matrice secondaria usare per le celle un tipo Value (che dal link postato sembra più veloce) oppure un tipo Reference (che dovrebbe puntare alla stessa area di memoria del valore della matrice base)?

grazie mille a tutti siete stati utilissimi, come sempre!