MapViewer: Cachedateien werden nach Ablauf nicht gelöscht

Rund um die LCL und andere Komponenten
Antworten
willie68
Beiträge: 16
Registriert: Di 9. Sep 2025, 11:03

MapViewer: Cachedateien werden nach Ablauf nicht gelöscht

Beitrag von willie68 »

Moin,
einen hab ich wieder gefunden. Wenn ich den Dateicache im MapView einschalte, werden die Daten zwar in dem Verzeichnissen abgelegt. Stell ich eine Ablaufzeit ein (CacheMaxAge) werden zwar Tiles die schon mal im Cache gelandet und abgelaufen sind, neu geladen. Aber Dateien, die nicht mehr angezeigt werden bleiben auf ewig im Cache.
Was fehlt ist ein Aufräumtask, der den Cache (einmal proTag) aufräumt. Oder zumindest eine entsprechende Funktion, die man selber aufrufen kann. (Am besten natürlich in einem eigenen Thread.)

MaxAge wird nur in dieser Funktion verwendet.

Code: Alles auswählen

function TPictureCache.DiskCached(const aFileName: String): Boolean;
var
  FullFileName: string;
  Age: TDateTime;
begin
  if UseDisk then
  begin
    FullFileName := BasePath + aFileName;
    Result := FileAge(fullFileName, Age) and (DaysBetween(Now, Age) <= FMaxAge);
  end
  else
    Result := False;
end;

wp_xyz
Beiträge: 5277
Registriert: Fr 8. Apr 2011, 09:01

Re: MapViewer: Cachedateien werden nach Ablauf nicht gelöscht

Beitrag von wp_xyz »

Ich habe jetzt dem MapViewer eine Methode DeleteCacheFiles spendiert, die die Dateien und Verzeichnisse in den Caches der aktuell verwendeten Provider löscht. Die Prozedur löscht rabiat den ganzen Ordner samt Inhalt, ohne die einzelnen Dateien zu prüfen, ob sie das CacheMaxAge überschritten haben - das wäre mir zu aufwendig und wahrscheinlich auch zu langsam.

CacheMaxAge ist außerdem eher für das Nachladen einer Datei vom Provider gedacht (der wiki-Artikel war diesbezüglich irreführend). Wenn CacheMaxAge, wie jetzt, quasi unendlich ist, wird eine Cache-Datei nur genau 1x aus dem Internet geladen. Wenn sich danach etwas auf der Karte geändert hat, wird es nicht dargestellt.

Antworten