![]() |
Alternative zu loadfromfile viele kleine Dateien
Für eine skinroutinelade ich viele kleine Grafikdateien (jpg,png) zum erstellen der Form einzeln ein, da die Koordinaten und Dateinamen in einer Ini hinterlegt sind.
Die Routine braucht sehr lange beim Start des Programms, weil es eben viele kleine Dateien sind (mehr als 300) und der Festplattenzugriff lahm ist. Eine große Datei würde schneller laden als die vielen kleinen. Gibt es eine Möglichkeit, alle Dateien in ein zip zu packen und es in der skinroutine beim starten zu entpacken und daraus dann die Bilder wieder zu nutzen ? sprich aus der ini wiedrum die Koordinaten zu entnehmen und die im Speicher entpackten Dateien dann zu platzieren ? Wäre das im Längen schneller als jetzt ? |
Re: Alternative zu loadfromfile viele kleine Dateien
Nein, da die Pack/Entpack-Rechenzeit ja dann noch miteinfließt, wenn du am Code ansonsten nichts änderst. Es dauert also IMHO noch länger...
|
Re: Alternative zu loadfromfile viele kleine Dateien
Müssen die GrafikDateien denn austauschbar sein, wenn nein dann würde es
sich eventuell anbieten die Dateien als Resource in das Programm direkt einzubinden. Grüße Klaus |
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
|
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
Ich wollte mir die vielen Festplattenzugriffe sparen... |
Re: Alternative zu loadfromfile viele kleine Dateien
Ich würde nach Möglichkeit die einzelnen Grafiken in eine Datei packen und dann mit CopyRect und ähnlichem aus dieser einen Grafik die einzelnen Skin-Grafiken rausziehen. Geht natürlich nur, wenn die Bilder eine fest definierte Größe haben.
|
Re: Alternative zu loadfromfile viele kleine Dateien
das einfachste ist du schreibst alle deine Skindateien hintereinander in die Datei und speicherst eben die Positionen in eine die Ini (oder sogar mit in diese Datei)
Folgendes ist ungetestet sollte aber funktionieren.
Delphi-Quellcode:
var
lFile : TMemoryStream; lBigFile : TFileStream; lCount : Integer; begin lFile := TMemoryStream.Create(); lBigFile := TFileStream.Ceate(Filename, fmCreate); for lCount := 0 to DateiListe.Count - 1 do begin lFile.LoadFromFile(DateiListe.Strings[lCount]; Ini.WriteString('Files', 'File' + IntToStr(lCount), DateiListe.Strings[lCount]); Ini.WriteInteger('Files', 'FilePos' + IntToStr(lCount), lBigFile.Position); Ini.WriteInteger('Files', 'FileSize' + IntToStr(lCount), lFile.Size); lFile.Position := 0; lBigFile.CopyFrom(lFile, lFile.Size); end; lBigFile.Free; lFile.Free; end; |
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
dann müsste man in der ini einmal die Source und die Destination-Koordinaten angeben ??? Das Problem wäre dann noch, das es sich um png und jpg handelt....lässt sich schlecht zusammenfassen...und nur png funktioniert aus anderen Gründen nicht.... hmmm oder die jpg's in ein Bild zusammen und die png's in einem anderen ? |
Re: Alternative zu loadfromfile viele kleine Dateien
Das zusammenfassen würde ich lassen denn dann müsstest du das Bild in einem Stück laden und da kann es zu Problemen kommen. Denn dazu müsstest du ein zusammenhängendes Stück Speicher haben was groß genug für alle Grafiken ist.
|
Re: Alternative zu loadfromfile viele kleine Dateien
In der Codelib ist ein Programm zum zusammenfügen vieler kleiner Daten zu einer und ist auch recht schnell
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 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