Nein, kann ClientDataSet auch nicht vollständig.
Man kann (RecordSize * RecordCount) + (TBlobField().Size jedes einzelnen BlobFeldes) rechnen,
bzw. TField.DataSize + (if is TBlobField then add TBlobField().Size) jedes einzelnen Feldes.
Und dazu kommt dann noch jeweils der Offset der Speicherverwaltung.
siehe getmem.inc > SmallBlockTypes ... Standardmäßig: jeder kleine Speicherblock bis 2608 Bytes wird auf jene Größen aufgerundet,
Mittelgroße Blöcke bis 258KB werden auf 256 Bytes aufgerundet und große Blöcke auf 64KB (Verwaltungsgröße vom Windows)
Natürlich wäre es schöner, wenn Embarcadero eine virtuelle Property/Methode im TDataSet einführt, für "Speicherverbrauch", welches dann auch von FireDAC und Sonstigem entsprechend implementiert würde.
Oder zumindestens wenn die Memory-DataSets sowas hätten. (oder ganz geil gleich direkt in TObjekt, so daß man sowas standardisiert
jeder Komponente fragen könnte ... bei TPersistent könnte man eventuell serialisieren und dessen Größe nehmen, aber das muß nicht mit dem
RAM-Verbrauch übereinstimmen, wie z.B. gespeichert als
ANSI/UTF-8 und im
RAM als
Unicode)