AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Kann ich herausfinden wie groß eine Memory-Datenbank ist?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Der schöne Günther · begonnen am 8. Jul 2016 · letzter Beitrag vom 5. Aug 2016
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

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

  Alt 8. Jul 2016, 14:14
Datenbank: ᕦ[ •́ ﹏ •̀ ]⊃¤=[]::::::::> • Version: ┌༼◉ل͟◉༽┐ • Zugriff über: FireDAC
Angenommen ich habe ein TClientDataSet oder eine TFDMemTable . Nur eine Tabelle, eine Feld davon ist ein Blob.

Kann ich herausfinden wieviel Hauptspeicher das DataSet jetzt gerade verschlingt?
  Mit Zitat antworten Zitat
zagota

Registriert seit: 3. Sep 2014
38 Beiträge
 
#2

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

  Alt 8. Jul 2016, 14:49
Angenommen ich habe ein TClientDataSet oder eine 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...
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

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

  Alt 21. Jul 2016, 10:30
Ja, ein TClientDataSet hat sogar die Eigenschaft 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 TFDMemTable aus FireDAC...
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
555 Beiträge
 
Delphi 10.3 Rio
 
#4

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

  Alt 22. Jul 2016, 18:37
Suchst du RecordSize ?

Ja, ein TClientDataSet hat sogar die Eigenschaft 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 TFDMemTable aus FireDAC...
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

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

  Alt 25. Jul 2016, 19:09
RecordSize liest sich gut, aber die 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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 26. Jul 2016, 14:29
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

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

  Alt 26. Jul 2016, 16:31
Ich sehe nur dass mir ein TClientDataSet richtig genau sagen kann wieviel Platz es im RAM belegt, eine 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...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 27. Jul 2016, 11:12
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Jul 2016 um 11:16 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

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

  Alt 5. Aug 2016, 10:54
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 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".

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


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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