![]() |
Objektliste sprengt RAM (32-bit)
Hallo...
ich habe Probleme mit einer TObjectlist, in der ich Ergebniswerte mit Selektoren abspeichere. In der Liste können schon mal mehrere zehntausend Werte auflaufen. Ab einer bestimmten Menge gibt es ein "Out of Memory"-Fehler und das Programm stürzt ab. Was für mich aber unverständlich ist, wenn ich dieselben Daten in ein Stream packe und auf der Festplatte abspeichere, sind da nur wenige Kilobyte zu finden. Wieso bläht sich das so im RAM auf? Gibt es Möglichkeiten, das zu reduzieren? Meine prinzipielle Programmstruktur:
Delphi-Quellcode:
P.S.:
TWert = class
private FWert : Double; FSelektor1: Integer; FSelektor2: string; public constructor Create(AWert: Double; ASelektor1: Integer; ASelektor2: string); property Wert: Double read FWert write FWert; property Selektor1: Integer read FSelektor1 write FSelektor1; property Selektor2: string read FSelektor2 write FSelektor2; end; TWerteliste = class(TObjectList<TWert>) private public procedure Add(AWert: Double; ASelektor1: Integer; ASelektor2: string); function FindWert(ASelektor1: Integer; ASelektor2: string): Double; end; Um Fragen vorzubeugen: Ich nutze keine Datenbank, weil für mein Projekt schon die schnelleren Memorydatenbanken zu langsam sind. |
AW: Objektliste sprengt RAM (32-bit)
hm.
Der Speicherverbrauch hängt auch ein wenig von der Länge Deiner Strings ab, doch wenn die nicht "zu lang" sind, sollten hunderttausende dieser Einträge kein Problem sein. Kannst Du das Problem auf ein Minimal-Beispiel mit Testdaten reduzieren? |
AW: Objektliste sprengt RAM (32-bit)
Zitat:
|
AW: Objektliste sprengt RAM (32-bit)
Also die Strings haben eine ungefähre Länge von 10 bis 30 Zeichen. Allerdings sind da ab-und-zu auch griechische Buchstaben drin.
Ich habe auch schon andere Typen versucht, also Shortstring, ShortInt usw. Hat alles nichts gebracht. Zitat:
|
AW: Objektliste sprengt RAM (32-bit)
Hey,
sicher das es keine (heftigen) Leaks gibt? Freundliche Grüsse |
AW: Objektliste sprengt RAM (32-bit)
Zitat:
|
AW: Objektliste sprengt RAM (32-bit)
Zitat:
|
AW: Objektliste sprengt RAM (32-bit)
Zitat:
|
AW: Objektliste sprengt RAM (32-bit)
Delphi-Quellcode:
So das ist meine reale Liste. (Das oben war nur das Prinzip)
FName : string;
FHerkunft : string; FLF : Integer; FIndx : Integer; FValue : TAnyValue; FKategorie : TKategorie; FKombiName : string; FKombiGruppe : TKombiGruppe; FKombiRechenIndex: Integer; Was mir gerade ins Auge springt, ist dies TAnyValue, was ich nutze. Kann das das Problem sein? Ich hoffe ![]() P.S.: TKategorie, TKombiGruppe sind nur so kleine Typen : TKategorie = (eins, zwei, drei ,..); |
AW: Objektliste sprengt RAM (32-bit)
Hi,
wie schon erwähnt... Sicher das es keine Memory Leaks sind? Glaube nicht dass das von den ganzen strings kommt... schau doch mal mit FastMM oder ![]() Falls ja musst du halt ein wenig aufräumen :P Freundliche Grüsse |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 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