Solange das DataSet offen ist bleiben die Daten
IMHO im Speicher. Das Programm kann ja nicht wissen, dass du nicht doch irgendwann wieder auf den ersten Datensatz springen möchtest.
Langsam aber speicherschonender wäre, wenn du dir nur die 40.000 Primärschlüssel holst und dann jeden Datensatz einzeln lädst. Aber wenn ich recht überlege, wäre das wahrscheinlich ein Performance-Alptraum.