Come chiamare gli oggetti che possono eliminare i dati memorizzati nella cache per soddisfare i vincoli di memoria?

1

Sto sviluppando alcuni software multipiattaforma destinati a funzionare su dispositivi mobili. Sia iOS che Android forniscono avvisi di memoria insufficiente. Ho in programma di creare una classe wrapper che libererà le risorse memorizzate nella cache (come le trame) quando vengono emessi avvisi di memoria bassa (supponendo che la risorsa non sia in uso). Se la risorsa torna a essere utilizzata, la re-memorizzerà nella cache, ecc ... Sto cercando di pensare a come si chiama. In .Net, è simile a un "riferimento debole" ma ha senso solo quando si ha a che fare con la garbage collection, e dato che sto usando c ++ e shared_ptr, un riferimento debole ha già un significato che è diverso da quello che sono pensando a. C'è anche la differenza che questa classe sarà in grado di ricostruire la cache quando necessario. Cos'è questo pattern / qualunque cosa si chiami?

Modifica: sentiti libero di consigliare i tag per questa domanda.

    
posta Brent 29.06.2013 - 00:16
fonte

2 risposte

0

Un termine usato per questo è "Scavenger", anche se l'ho visto principalmente nel contesto delle tecnologie Microsoft. Vedi qui nella pagina Panoramica sulla cache di ASP.NET :

Scavenging

Scavenging is the process of deleting items from the cache when memory is scarce. Items are removed when they have not been accessed in some time or when items are marked as low priority when they are added to the cache.

Ed ecco una definizione della caching di Microsoft nella pagina WinINet :

The cache scavenger periodically cleans items from the cache. If an item is added to the cache and the cache is full, the item is added to the cache and the cache scavenger is scheduled.

Quindi se si dispone di un oggetto il cui compito è quello di liberare gli elementi memorizzati nella cache quando le risorse sono basse, sarebbe un Scavenger. Potresti avere diverse strategie di scavenging - Prima più grande, Prima più bella, ecc., Ciascuna implementata da un diverso Scavenger.

    
risposta data 29.06.2013 - 08:25
fonte
0

Si chiama un ... Cache. :-). Seriamente, il flushing intelligente è altrettanto importante per una buona implementazione della cache rispetto a riempirlo in modo intelligente.

Ma il tuo esempio non è in realtà una cache, poiché non è opzionale. Una texture DEVE essere caricata prima di poter essere renderizzata. (Vorrei usare i termini caricare e scaricare in questo caso).

Quindi immagino una classe:

  • Viene chiesto di assicurarsi che venga caricata un'immagine di trama, ogni volta che viene utilizzata.
  • Carica l'immagine dalla memoria corretta (ad esempio una determinata cartella di risorse)
  • Per tenere traccia dei modelli di utilizzo della trama.
  • che può essere chiesto di scaricare trame, in base a questi modelli di utilizzo.

Allora mi chiamerei TextureLoader (abbreviazione di TextureLoaderUnloader)

    
risposta data 29.06.2013 - 08:17
fonte

Leggi altre domande sui tag