![]() |
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
|
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
|
Re: Alternative zu loadfromfile viele kleine Dateien
@Bernhardt: Das ist wirklich das Problem. Ich habe auch bereits die Erfahrung gemacht dass, das einlesen mehrere Dateien sehr lange dauert. Selbst wenn man die Dateien nicht liest sondern immer nur öffnet und wieder schließt vergeht eine menge Zeit.
|
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
Bei einem PIV etwa 5-10 sek. Etwa 250-300 Einzelgrafiken als png mit 5-100 Kb und etwa Gesamt 8 MB . Ich nutze die pngimage-Kompo damit png' nutzbar sind, lade die Bilder mit Loadfromfile direkt in die Form. |
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
Soll ich eine eigene Application schreiben, womit man alle im sagen wir mal einem best.Ordner befindlichen Dateien in eine zusammenfasst sowie eine ini erstellen lassen, die die Positionen angibt ? Dann im Hauptprogramm die ini auslesen und anhand der Positionen die eigendlichen Dateien innerhalb der erstellten BigDatei finden ?? |
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
![]() Mußt Du wirklich zum Programmstart alle 300 Dateien laden oder könnte das nicht incrementell erfolgen wenn die Dateien benötig werden? |
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
|
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
|
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
Hatte alles ein Für und Wider...aber die flüssige Nutzung war erstmal wichtiger... Enthalten im Programm sind ein Audio und Videoplayer und wenn die resumen und noch der Menüwechsel "neu" geladen werden muss, dann hakt es ! Die App sollte auch auf schwacheren PCs flüssig laufen, an Speicher haperts ja meist nicht , die CPUs sind teuer oder teilweise für diese Anwendung nicht lohnenswert aufrüstbar... |
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
Setze ich keine Application.proc.... dann schafft ein fixer Rechner das in 4 Sek und ein langsamer etwa in 20 sek...nur dann kann ich Windows nicht mehr bedienen... |
Re: Alternative zu loadfromfile viele kleine Dateien
du könntest auch erstmal statt TIni... TMemIni verwenden ... TIni und Co. greifen jedesmal auf die WinAPI zu und die öffnen für jeden Wert die INI neu und lesen nur den einen Wert aus (wobei da natürlich alles vorherige jedesmal neu ausgewertet werden muß.
TMemIni ließt die Datei nur einmal in den Arbeitsspeicher und ließt dann von dort die Werte. |
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
|
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
Wenn ich die Maus-Over-Grafiken weglasse, so habe ich "fast" doppelten Speed, macht sich ungemein bemerkbar.(soeben kurz getestet) Wenn ich den Tipp von himitsu mit der TMemini sowie die vielen kleinen Dateien in eine große umwandel, dann sollte es doch schon ein Fortschritt sein? Oder hast du noch einen anderen Gedanken ? Denn irgendwie muss ich ja die Grafiken einlesen und auch zeichnen. |
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
|
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
|
Re: Alternative zu loadfromfile viele kleine Dateien
@Bernhard Geyer: Ich tippe darauf das es an den Dateien liegt. Grund: ich hatte schon gleiches Problem. Mehrere hundert Dateien in einem Ordner und es hat eine halbe Ewigkeit gedauert. Das ganze in eine einzelne Datei gestopft und es ist nur so durchgeflutscht
|
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
|
Re: Alternative zu loadfromfile viele kleine Dateien
Zitat:
|
Re: Alternative zu loadfromfile viele kleine Dateien
Bohhr :shock: Ich habe alle TIniFile-Einträge gegen TMemIniFile-Einträge getauscht, jetzt habe ich 400% mehr Speed....
Gibt es dabei einen Haken ?? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 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