![]() |
Datei > 500mb vollständig in RAM laden
Moinsen DP
Wie bekomme ich meine Datei möglichst schnell in den RAM um sie dort wie ein TFielStream oder TMemoryStream zubehandeln. Den fs öffnen un in einen ms kopieren, scheint mir nicht der richtige Weg. (Hat zu lange gedauert - ein víelfaches länger als sie einfach nur zukopieren, und nachdem immer noch nicht fertig geladen wurde aber schon viel mehr Speicher drauf ging, habe ich die Sache abgebrochen.) Aber vielleicht lags auch nur am Code :gruebel:
Delphi-Quellcode:
Weiß doch sicher wieder jemand bescheid?! :mrgreen:
function LoadTable(AFileName: String; var AResult: TMemoryStream): Boolean; overload;
var fs: TFileStream; begin Result := False; if FileExists(AFileName) then begin fs := TFileStream.Create(AFileName, fmOpenRead); AResult := TMemoryStream.Create; AResult.CopyFrom(fs, fs.size); fs.Free; Result := AResult.Size > 0; end; end; |
Re: Datei > 500mb vollständig in RAM laden
Hi Harry,
mach doch direkt ein MS.LoadFromFile ;-) [edit]Wobei ich keinen Sinn dabei sehe, eine komplette 500mb Datei in den Ram zu laden. Was hast Du den vor? Vielleicht geht das auch anders. [/edit] |
Re: Datei > 500mb vollständig in RAM laden
Wie wäre es denn mit sog. "MemoryMapped Files" und die restliche Arbeit dem OS überlassen?
|
Re: Datei > 500mb vollständig in RAM laden
Äffffffffffffff. Genau das hab ich gestern gesucht und nich gefunden. :wall: :wall: :wall:
Danke. |
Re: Datei > 500mb vollständig in RAM laden
Hi Daniel,
MemoryMapped Files - gutes Stichwort. Da guck ich doch ma nach :mrgreen: Edit: Ich versuch grad so ne Art Datenbank zubauen. Ohne dabei wirklich auch ADO und Co zusetzten. Denn bei Test ist mir aufgefallen, mit zunehmender Grösse sank auch die Performance der SQL anfragen rapiede Schon nach 15 Min inserst bei anlegen, kamem Zeiten > 200ms raus, was nicht akzeptabel ist. Ich schreibe jetzte meine Daten zuerst in den Speicher und sicher dort aller paar Minuten in eine Datei. Das geht besser. |
Re: Datei > 500mb vollständig in RAM laden
Zitat:
Gruß Der Unwissende |
Re: Datei > 500mb vollständig in RAM laden
Zitat:
|
Re: Datei > 500mb vollständig in RAM laden
Und bei einem 512 MB System bleiben dann noch 12 MB für Betriebssystem und dein Programm (das keine anderen Programme noch nebenbei laufen, habe ich gleich mal außen vor gelassen, da sehr unwahrscheinlich ist, dass man die noch gestartet bekommt bzw. vernünftig mit arbeiten kann). Selbst auf einem 1 GB System macht es nicht wirklich Freund zu arbeiten, wenn plötzlich die Hälfte vom Speicher fehlt.
Das die Performance in den Keller geht, wenn ich jedes Byte einzeln lade, dürfte irgendwie logisch sein. Arbeite mit einem entsprechenden Lesepuffer (512 KB) und du solltest auch keine Performance-Probleme haben. |
Re: Datei > 500mb vollständig in RAM laden
Zitat:
[edit] roter Kastern?! Aber gleich eine Ergänzung, wie Luckie schon sagte, wirst Du schnell das Problem bekommen, dass Dir das OS schon gar nicht den gesamten RAM zur Verfügung stellen wird, es muss ja selbst auch noch laufen! Wenn sich dann 512 MByte noch potenzieren landest Du schnell bei den Grenzen eines 32-Bit Systems. [/edit] |
Re: Datei > 500mb vollständig in RAM laden
Zitat:
Diese doch sehr fundamentale Wissenslücke sollte dich eigentlich auf den Gedanken bringen, dass du dich a) nicht mit genügend unterschiedlichen DBMS auseinandergesetzt hast und das Ganze b) nicht lange genug (Erfahrung). Jeder (JEDER) Versuch ein eigenes, auf eine spezielle App angepasstes, DBMS zu basteln, der mir bisher unter die Augen kam, war bestenfalls jämmerlich. Zitat:
Zitat:
Alles Dinge, die dir Firebird oder SQLite abnehmen würden, und beide machen diesen Job sehr gut. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 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-2025 by Thomas Breitkreuz