Wir entfernen die FireDAC-Indizes denn das scheint dafür zu sorgen dass FireDAC sich alles ins
RAM schaufeln will (wofür auch immer)
Natürlich muss FireDAC alle Datensätze (also die von der
Query gelieferten) im Speicher haben, damit sie lokal sortiert werden können. Wie sollte das auch sonst gehen. Das entspricht quasi einem FetchAll. Übrigens kann auch ein Aufruf von RecordCount unter bestimmten Umständen dieses auslösen.
Das erklärt aber nicht, warum eine
Query, die einen einzigen Datensatz zurückliefert, über 1 GB Speicher benötigt.
Daher mein Vorschlag, die
Query isoliert außerhalb des Programms bzw. in einem Testprogramm auszuführen. Entweder braucht sie dort auch diesen Speicher, dann muss man sehen, welche Felder das verursachen. Ist der Speicherverbrauch der
Query selbst aber deutlich geringer, liegt das Problem innerhalb des Programms und man kann dann sukzessiv die übrige Funktionalität einbinden, bis der Auslöser für den enormen Speicherverbrauch gefunden ist.