Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Kann ich herausfinden wie groß eine Memory-Datenbank ist? (https://www.delphipraxis.net/189680-kann-ich-herausfinden-wie-gross-eine-memory-datenbank-ist.html)

Der schöne Günther 8. Jul 2016 13:14

Datenbank: ᕦ[ •́ ﹏ •̀ ]⊃¤=[]::::::::> • Version: ┌༼◉ل͟◉༽┐ • Zugriff über: FireDAC

Kann ich herausfinden wie groß eine Memory-Datenbank ist?
 
Angenommen ich habe ein
Delphi-Quellcode:
TClientDataSet
oder eine
Delphi-Quellcode:
TFDMemTable
. Nur eine Tabelle, eine Feld davon ist ein Blob.

Kann ich herausfinden wieviel Hauptspeicher das DataSet jetzt gerade verschlingt?

zagota 8. Jul 2016 13:49

AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1342252)
Angenommen ich habe ein
Delphi-Quellcode:
TClientDataSet
oder eine
Delphi-Quellcode:
TFDMemTable
. Nur eine Tabelle, eine Feld davon ist ein Blob.

Kann ich herausfinden wieviel Hauptspeicher das DataSet jetzt gerade verschlingt?

RecLen := VarArrayHighBound(ClientDataSet.Data, 1);
ist ein Versuch wert...

Der schöne Günther 21. Jul 2016 09:30

AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
 
Ja, ein
Delphi-Quellcode:
TClientDataSet
hat sogar die Eigenschaft
Delphi-Quellcode:
DataSize
:
Zitat:

Gibt an, wie viele Bytes für die Eigenschaft Data benötigt werden.

Sie können DataSize auslesen, um die Anzahl der Bytes zu ermitteln, die zum Speichern der Daten einer Client-Datenmenge benötigt werden
Genau das habe ich gesucht. Jetzt suche ich das nur noch für eine
Delphi-Quellcode:
TFDMemTable
aus FireDAC...

MichaelT 22. Jul 2016 17:37

AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
 
Suchst du RecordSize ?

Zitat:

Zitat von Der schöne Günther (Beitrag 1343114)
Ja, ein
Delphi-Quellcode:
TClientDataSet
hat sogar die Eigenschaft
Delphi-Quellcode:
DataSize
:
Zitat:

Gibt an, wie viele Bytes für die Eigenschaft Data benötigt werden.

Sie können DataSize auslesen, um die Anzahl der Bytes zu ermitteln, die zum Speichern der Daten einer Client-Datenmenge benötigt werden
Genau das habe ich gesucht. Jetzt suche ich das nur noch für eine
Delphi-Quellcode:
TFDMemTable
aus FireDAC...


Der schöne Günther 25. Jul 2016 18:09

AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
 
Delphi-Quellcode:
RecordSize
liest sich gut, aber die
Delphi-Quellcode:
FDMemTable
gibt trotzdem immer das gleiche zurück, egal wie viele Megabytes ich in ein Blob-Feld gestopft habe. Das ClientDataSet gibt einen Wert zurück der sehr plausibel erscheint.

himitsu 26. Jul 2016 13:29

AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
 
RecordSize ist die Größe des Records, also alle Felder mit statischer (Maximal)Länge ... inkl. der VARCHARs usw.
Blobs sind darin nur als "Pointer" enthalten und deren Daten liegen "außerhalb". (beim TClientDataSet z.B. in je einem TData-Objekt)

Der schöne Günther 26. Jul 2016 15:31

AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
 
Ich sehe nur dass mir ein
Delphi-Quellcode:
TClientDataSet
richtig genau sagen kann wieviel Platz es im RAM belegt, eine
Delphi-Quellcode:
TFDMemTable
kann so etwas selbstverständliches anscheinend nicht.

Vielleicht schreibe ich die FireDAC-Leute auch mal an, das kann ja an sich nicht so schwer sein...

himitsu 27. Jul 2016 10:12

AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
 
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)

Der schöne Günther 5. Aug 2016 09:54

AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
 
Zitat:

Zitat von himitsu (Beitrag 1343552)
TPersistent könnte man eventuell serialisieren und dessen Größe nehmen

Das könnte man sicher auch irgendwie für ein TDataSet speziell machen, oder Dinge wie
Delphi-Quellcode:
SaveToStream
bei FireDac, aber das kann ja auch nur eine Notlösung sein: "Speichere mal bitte alles in einen Stream zu dem ich dann schaue wie groß er ist weil du mir nicht sagen willst wieviel es ist". 8-)

Ich glaube es ist Zeit für einen Eintrag im Quality Portal als FeatureRequest...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz