ich hab arge Speicherprobleme mit meinem Bilddatenbank- Projekt...und zwar bekomme ich einen out of memory error...naja, ich poste erst einmal ein wenig code:
Delphi-Quellcode:
SL := TStringList.Create;
for i := 0 to pics.count-1 do
begin
setlength(myPics,length(myPics)+1);
myPics[length(myPics)-1].fileName := pics[i];
myPics[length(myPics)-1].category := cat;
myPics[length(myPics)-1].discIndex := discID;
myPics[length(myPics)-1].keywords := '';
myPics[length(myPics)-1].date := Now;
myPics[length(myPics)-1].folder := picfolders[i];
// Bilddateien speichern
oldName := folderName + picFolders[i] + pics[i];
newName := folderName + picFolders[i] + inttostr(length(myPics)-1) + '.jpg';
renameFile(oldName,newName);
SL.Add(newName);
end;
In der for-Schleife werden im Wesentlichen Bildnamen, die vorher aus Dateien gescannt wurden, in mein dynamisches array myPics[] geladen. In meinem Beispiel ist das Array leer und wird um 11.000 EInträge erweitert. Jeder EIntrag hat in etwa 540 Bytes Speicherbedarf --> 6 MB gesamt
Außerdem werden alle 11.000 Dateinamen + Pfad in die Stringlist SL geschrieben. Das ist nötig, weil anhand dieser Liste dann später das Archiv erstellt wird, eine Datei, in der alle 11.000 Bilder gepackt werden.
So nun kommt das Merkwürdige: Wenn ich nur das Array fülle, steigt der
RAM-Bedarf um 6 MB an und alles ist gut. Wenn ich nur die Stringliste fülle, steigt der Bedarf kaum merklich an und auch alles ist gut. Aber wenn ich beides zusammen mache (so wie im code oben) dann steigt der Speicherbedarf sprungartig auf 30,40,50, 60 MB und dann...BANG ..out of memory.
- warum ist das so?
- generell: Mein Array wird ja zwangsläufig saugroß, wenn tausende Bilder in der
DB sind. Warum bekomme ich memory errors, wozu gibt es ne Auslagerungsdatei...was kann ich anders machen, um auch große Mengen an Daten handhaben zu können?
Danke für die Hilfe...