Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Bringt ein eigener Icon-Cache was? (https://www.delphipraxis.net/172629-bringt-ein-eigener-icon-cache.html)

Popov 14. Jan 2013 21:32

Bringt ein eigener Icon-Cache was?
 
Ich gehe gerade ein kleines Projekt an, in dem ich, aber das ist nur ein Teil des Projekts, etwas in der Art eines Dateimanagers programmiere. Allerdings ist hier die Zeit ein kritischer Faktor. Bevor ich mich aber paar Tage in die falsche Richtung begebe und ein Icon-Cache unnötig programmiere, vielleicht hat bereits einer Erfahrungen in der Richtung.

Ein kleines Nadelöhr bei Dateimanagern sind immer die Icons. Die müssen aus den Dateien extrahiert werden, und das kostet Zeit. Selbst der Explorer trickst da etwas. Nun stellt sich mir die Frage was schneller ist: die Icons immer wieder aufs neue aus der Datei extrahiert oder ein eigener Icon-Cache? Oder kommt beides aufs gleiche raus? Mit Cache meine ich kein Cache im RAM, sondern z. B. die letzten 2000 Icons auf der Festplatte zwischen speichern, so dass die nicht immer wieder extrahiert werden müssen.

Hat einer Erfahrungen mit einem eigenen Icon-Cache?

Bernhard Geyer 14. Jan 2013 22:32

AW: Bringt ein eigener Icon-Cache was?
 
Lade das Icon erst wenn die Datei in deiner Listview angezeigt wird. Dann hast du zum Programmstart/Verzeichniswechsel evtl. 50 Icons die du laden musst.

Eigener Cache würde ich vermeiden. MS selbst bringt es ja nach 13 Jahren nicht hin die Fehler in ihren Icon-Caches zu eliminieren (Win7 hat jedenfalls die Problem noch, Win8 weiß ich nicht).

Namenloser 14. Jan 2013 22:55

AW: Bringt ein eigener Icon-Cache was?
 
Was genau meinst du mit Icons? Eigentlich sind fast nur bei Exe-Dateien die Icons in der Datei selbst gespeichert, alle anderen sind systemweit pro Dateiendung festgelegt. Oder meinst du auch Vorschaubilder, z.B. bei Fotos oder Videos?

Falls es um ersteres geht, ist es doch sicher möglich, alle auf einen Rutsch in den RAM zu laden, dann sollte das schnell gehen.

Falls es um letzteres geht: Man könnte da eine Datenbank anlegen, in der die Vorschaubilder zusammen mit dem letzten Änderungsdatum der Datei gespeichert werden. Beim Anzeigen einer Dateiliste würde ich dann zunächst bei den Dateien, die anscheinend nicht verändert wurden, das Vorschaubild aus dem Cache anzeigen, und bei den veränderten Dateien einen Platzhalter. Dann würde ich alle Vorschaubilder asynchron nachladen, wobei die geänderten Dateien natürlich höhere Priorität haben. Und natürlich dabei den Cache aktualisieren.

BUG 14. Jan 2013 23:12

AW: Bringt ein eigener Icon-Cache was?
 
Mhm, ich könnte mir vorstellen, dass unter bestimmten Voraussetzungen (komplizierte Aufarbeitung der Icons, ...) ein Cache schon nützlich sein kann. Andererseits könnte es knifflig sein, eine gute Caching-Strategie zu entwickeln.

An deiner Stelle würde ich das Laden der Icons so kapseln, das du später "einfach" Caching einfügen kannst.
Dann kannst du erstmal ausprobieren, ob es überhaupt nötig ist.

Vielleicht ist es in dem Zusammenhang auch sinnvoll, sich mal die Shell-Interfaces (>=Vista) oder thumb.db (<Vista) anzugucken.


IMHO sollte das Laden der Icons wenn möglich asynchron erfolgen, damit sich das UI nicht zäh anfühlt.

Disclaimer: Keine praktische Erfahrung mit Dateimanagern oder den Shell-Interfaces.

dunningkruger 15. Jan 2013 00:49

AW: Bringt ein eigener Icon-Cache was?
 
Nette Idee, der eigene Icon-Cache.

Statt Winzip steigt der Anwender um auf 7zip...

Den eigenen Icon-Cache wirst Du zwangsweise mit dem System-Icon-Cache synchronisieren müssen, falls Dein Dateimanager nicht die falschen Symbole (Winzip statt 7zip) anzeigen soll, oder?

Also eher eine Schnapsidee (prost-Smiley nicht gefunden)

jaenicke 15. Jan 2013 05:05

AW: Bringt ein eigener Icon-Cache was?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1199044)
MS selbst bringt es ja nach 13 Jahren nicht hin die Fehler in ihren Icon-Caches zu eliminieren (Win7 hat jedenfalls die Problem noch, Win8 weiß ich nicht).

Ich würde das nicht wirklich als Fehler einstufen. Exe-Dateien ändern nun einmal auf 99,99% der PCs nicht plötzlich das Icon. Und nur wegen Entwicklungs-PCs die Arbeitsgeschwindigkeit aller PCs im Windows Explorer zu reduzieren (denn die Icons zu prüfen kann bei vielen .exe Dateien im Ordner ja schonmal etwas dauern), würde ich zumindest nicht wollen. Ich weiß ja wie ich das Problem bei mir korrigiere, wenn es denn mal sichtbar wird.

Aber ja: Der Effekt tritt auch bei Windows 8 so auf.

Furtbichler 15. Jan 2013 06:31

AW: Bringt ein eigener Icon-Cache was?
 
Es wäre doch kein Problem, den Icons in einem Cache eine begrenzte Lebensdauer mitzugeben, z.B. 10 Minuten. Und flüssig arbeiten lässt sich damit allemal.

hitzi 15. Jan 2013 06:54

AW: Bringt ein eigener Icon-Cache was?
 
Ich würde die Icons im Cache speichern. Das hat den Vorteil, dass der Anwender beim nächsten Aufruf von dem Ordner schnell alle Symbole sieht. Bleibt der Anwender in diesen Ordner, kannst du im Hintergrund locker die Icons auf Änderungen überprüfen und dann eventuelle Änderungen im Listview und im Cache ändern. Vorteil: Das Arbeiten mit deinem Programm fühlt sich flüssig an und für Details braucht auch der Anwender seine Zeit und in der Zeit hat dein Programm dann schon die Änderungen erkannt.

Klickt der Anwender nur schnell durch, ist es egal - dann sieht er die eventuell falschen Symbole nur kurz, wenn er sie denn überhaupt wahrnimmt. Dann "scannt" er das Listview sicherlich eh nur nach Ordnersymbolen. Aber die kurz wahrgenommene gesamte Optik stimmt dann eben, da zu jedem Dateinamen ein Symbol angezeigt werden kann.

Vielleicht im Iconcache das Symbol mit dem Dateidatum und/oder Hash speichern. So muss man nicht blind alle Symbole extrahieren, sondern nur bei denen, wo sich die Datei in so einer abgespeicherten Eigenschaft unterscheidet.

CCRDude 15. Jan 2013 07:13

AW: Bringt ein eigener Icon-Cache was?
 
Klares Pro Iconcache hier.

Nicht jeder Zugriff eines Dateimanagers geschieht ja auf der lokalen Platte. Über's Netzwerk wird das Icon-Auslesen schon langsamer, nimmt man dann noch ein einfaches NAS, wie es langsam erst ausstirbt, hat man nur noch 5 MB/s. Oder jemand greift auf Dateien zuhause zu - jede Fritz!Box bringt heute schon ein VPN, das es klickeinfach macht, über ne DSL-Leitung auf die Windows-Freigabe zuhause zuzugreifen. Muss man da auf Icons warten, dauert das gefühlt ewig.

Wenn Du Angst hast, dass der Cache zu groß wird, könntest Du das auf Partitionen <> DT_FIXED limitieren (zwei parallele Methoden zu warten würde mir allerdings nicht zusagen). Und vor allem nur die Icons der für Dich relevanten Größen cachen (ein komplettes Icon mit Auflösungen bis zu 128x128 hat auch schonmal 100 KB).

Total Commander hat da übrigens diverse Einstellungen, z.B. keine Icons auf Diskettenlaufwerken und/oder Netzwerklaufwerken anzuzeigen.

Bernhard Geyer 15. Jan 2013 07:24

AW: Bringt ein eigener Icon-Cache was?
 
Zitat:

Zitat von jaenicke (Beitrag 1199053)
Ich würde das nicht wirklich als Fehler einstufen. Exe-Dateien ändern nun einmal auf 99,99% der PCs nicht plötzlich das Icon. Und nur wegen Entwicklungs-PCs die Arbeitsgeschwindigkeit aller PCs im Windows Explorer zu reduzieren (denn die Icons zu prüfen kann bei vielen .exe Dateien im Ordner ja schonmal etwas dauern), würde ich zumindest nicht wollen. Ich weiß ja wie ich das Problem bei mir korrigiere, wenn es denn mal sichtbar wird.

Es geht auch um Programme die niemals per Compilierung ein neues Icon bekommen haben. Diese bekommen auch mal neue (falsche) Icons verpasst (welche dann wieder eine Zeit lang "halten").


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 Uhr.
Seite 1 von 2  1 2      

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