From d7e7d5b0f61e775d38efb58b14561cce42b984d1 Mon Sep 17 00:00:00 2001 From: valoq Date: Sun, 12 Apr 2026 12:42:35 +0200 Subject: [PATCH] limit preview cache size --- app.go | 1 + nav.go | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/app.go b/app.go index 5d7510d1f..15692293b 100644 --- a/app.go +++ b/app.go @@ -432,6 +432,7 @@ func (app *app) loop() { app.ui.draw(app.nav) case r := <-app.nav.regChan: app.nav.regCache[r.path] = r + app.nav.evictRegCache() if curr := app.nav.currFile(); curr != nil { if r.path == curr.path { diff --git a/nav.go b/nav.go index 7664ca466..57a1712f1 100644 --- a/nav.go +++ b/nav.go @@ -841,6 +841,7 @@ func (nav *nav) preload() { } nav.regCache[file.path] = ®{loading: true, loadTime: time.Now(), path: file.path} + nav.evictRegCache() select { case nav.preloadChan <- file.path: default: @@ -955,6 +956,7 @@ func (nav *nav) loadReg(path string, volatile bool) *reg { if !ok || (!gOpts.preload && r.loading) { r = ®{loading: true, loadTime: time.Now(), path: path} nav.regCache[path] = r + nav.evictRegCache() if gOpts.preload { select { case nav.preloadChan <- path: @@ -2021,3 +2023,20 @@ func (nav *nav) calcDirSize() error { return nil } + +const maxRegCacheSize = 512 + +func (nav *nav) evictRegCache() { + if len(nav.regCache) <= maxRegCacheSize { + return + } + var oldestKey string + var oldestTime time.Time + for k, r := range nav.regCache { + if oldestKey == "" || r.loadTime.Before(oldestTime) { + oldestKey = k + oldestTime = r.loadTime + } + } + delete(nav.regCache, oldestKey) +}