![]() |
Datenbank: ᕦ[ •́ ﹏ •̀ ]⊃¤=[]::::::::> • Version: ┌༼◉ل͟◉༽┐ • Zugriff über: FireDAC
Kann ich herausfinden wie groß eine Memory-Datenbank ist?
Angenommen ich habe ein
Delphi-Quellcode:
oder eine
TClientDataSet
Delphi-Quellcode:
. Nur eine Tabelle, eine Feld davon ist ein Blob.
TFDMemTable
Kann ich herausfinden wieviel Hauptspeicher das DataSet jetzt gerade verschlingt? |
AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
Zitat:
ist ein Versuch wert... |
AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
Ja, ein
Delphi-Quellcode:
hat sogar die Eigenschaft
TClientDataSet
Delphi-Quellcode:
:
DataSize
Zitat:
Delphi-Quellcode:
aus FireDAC...
TFDMemTable
|
AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
Suchst du RecordSize ?
Zitat:
|
AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
Delphi-Quellcode:
liest sich gut, aber die
RecordSize
Delphi-Quellcode:
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.
FDMemTable
|
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) |
AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
Ich sehe nur dass mir ein
Delphi-Quellcode:
richtig genau sagen kann wieviel Platz es im RAM belegt, eine
TClientDataSet
Delphi-Quellcode:
kann so etwas selbstverständliches anscheinend nicht.
TFDMemTable
Vielleicht schreibe ich die FireDAC-Leute auch mal an, das kann ja an sich nicht so schwer sein... |
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) |
AW: Kann ich herausfinden wie groß eine Memory-Datenbank ist?
Zitat:
Delphi-Quellcode:
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-)
SaveToStream
Ich glaube es ist Zeit für einen Eintrag im Quality Portal als FeatureRequest... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz