Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Alternative zu loadfromfile viele kleine Dateien (https://www.delphipraxis.net/96145-alternative-zu-loadfromfile-viele-kleine-dateien.html)

bluescreen25 19. Jul 2007 12:10


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 ?

calculon 19. Jul 2007 12:18

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...

Klaus01 19. Jul 2007 12:20

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

bluescreen25 19. Jul 2007 12:28

Re: Alternative zu loadfromfile viele kleine Dateien
 
Zitat:

Zitat von Klaus01
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

Es geht im einen Skin....also wird es auch noch andere Designs geben.....die ini bestimmt, wie viele Elemente (Bilder) verwendet werden....

bluescreen25 19. Jul 2007 12:33

Re: Alternative zu loadfromfile viele kleine Dateien
 
Zitat:

Zitat von calculon
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...

Es geht mir nicht um eine Kompression, sondern um ein zusammenhängendes Datenpaket bestehend aus den vielen Einzeldateien, die aber nacher im Programm wieder einzeln ansprechbar sein müssen..... die jpg und png's sind ja schon gepackt....

Ich wollte mir die vielen Festplattenzugriffe sparen...

Gausi 19. Jul 2007 12:39

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.

SirThornberry 19. Jul 2007 12:43

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;

bluescreen25 19. Jul 2007 12:48

Re: Alternative zu loadfromfile viele kleine Dateien
 
Zitat:

Zitat von Gausi
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.

Hmm, feste Größen haben diese natürlich nicht, weil auch die Elemente nicht fix an der selben Stelle landen.

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 ?

SirThornberry 19. Jul 2007 12:51

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.

franktron 19. Jul 2007 12:52

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 21:52 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz