Grundsätzlich halte ich das Laden derart großer Datenmengen für keine besonders gute Lösung. Es belastet die Datenbank, es belastet den Client. Mehrere hundertausend Datensätze kann kein Nutzer am Client sinnvoll bearbeiten.
Wenn FetchAll = false, wird nur eine Teilmenge der Daten vom Server geholt. Der "Rest" erst bei Bedarf. Dieser Bedarf tritt ein, wenn ein Filter gesetzt wird. Dann werden alle Daten benötigt, da der Filter ja auch eine mehr oder weniger große Menge des "Restes" betreffen kann. Das beim Setzen der Filters erforderliche Nachladen der hier ja wohl eher nicht unerheblichen Datenmenge kann dann schonmal etwas dauern. Und wenn die Daten dann da sind, muss die Filterbedingung für jeden Satz geprüft und ggfls. angewandt werden. Und das kann dann schonmal etwas dauern -> Die Anwendung friert ein.
Das gilt analog auch für SetRange.

Zitat von
Edelfix:
Oder sollte ab einer gewissen Anzahl von Daten generell eine
Query genutzt werden?
Ja!
In meinen Programmen lade ich grundsätzlich nur die Daten, die für den konkreten Fall benötigt werden.
Prophylaktisch einfach mal alle Daten zu laden, frei nach dem Motto: "Es könnte unter Umständen eventuell vielleicht möglich sein, dass von den Daten eventuell unter Umständen vielleicht was benötigt werden könnte oder eben auch nicht." funktioniert bei großen Datenmengen schlicht und einfach nicht. Weder Server noch Client sind damit glücklich (egal wie leistungsfähig die Hardware ist), noch können die Anwender solche Datenmengen sinnvoll verarbeiten, überschauen. Anwender sind für gewöhnlich glücklich damit, nur die Daten zu sehen, die sie für die konkrete Aufgabe benötigen. Und noch glücklicher sind sie, wenn das auch noch schnell geht.