Oggi sempre grazie a Claudio ho scoperto un oggetto che proprio non conoscevo. Il DataTableReader.

Questo oggetto, leggendo nella documentazione, permette di avere differenti tabelle (a-la DataSet) e di ciclarle in maniera ReadOnly e ForwardOnly.

Questa cosa mi ha fatto subito pensare:

1: Mio dio, sto mischiando pere con mele senza avere facolta di sapere cosa c'è in una e cosa c'è nell'altra (cosa che già odio nei dataset, figuriamoci qui....
2: Però, dovrebbe essere velocissimo...

Quindi visto che sono bizzarro, ho fatto due prove ed è venuta fuori una cosa singolare:
Il DataTableReader, con una sola istanza di tabella, paragonato al ciclo su righe e colonne di una DataTable.. èsi piu veloce, ma solo con pochi record. Se i record vanno oltre un certo numero (dai miei test sui 7/8000), improvvisamente il DataTableReader è penalizzato nei confronti del DataTable.

Ho fatto quindi la controprova, DataSet vs DataTableReader valorizzati con tabelle multiple.
Purtroppo, la situazione peggiora: con due tabelle e poco piu di 1000 record a tabella, il DataSet e già piu veloce del DataTableReader per fare un ciclo completo su righe e colonne...

Di seguito un immagine esplicativa di quello che accade. Ora, partendo dal presupposto che dal debugger le prove mi sembrano corrette.... come mai un oggetto che è stato fatto apposta per andare a leggere in ciclo tutte le righe di tutte le tabelle che ha dentro, si dimostra piu lento del DataSet??