Si prega di considerare il seguente modello di dati:I riferimenti alla stessa allocazione dei dati e la memoria
data Artist = Artist Text
data Song = Song Artist Text
data Catalogue = Catalogue (Set Artist) (Set Song)
Si può vedere che i Artist
s sono indicati da entrambe le Song
s e il Catalogue
. Il Catalogue
contiene un elenco di tutti gli artisti di cui da Song
s, quindi gli stessi valori di Artist
ottenere di cui da due posti.
Supponiamo di generare il valore Catalogue
utilizzando più applicazioni del seguente funzione:
insertSong :: Song -> Catalogue -> Catalogue
insertSong [email protected](Song artist title) (Catalogue artists songs) =
Catalogue (Set.insert artist artists) (Set.insert song songs)
E 'evidente che la Catalogue
otterrebbe riempito da riferimenti agli stessi valori del Artist
come il Song
s riferiscono, risparmiando così la memoria non memorizzando le copie di quei valori.
Il problema è che quando cerco di ricreare il catalogo da dati serializzati dalla deserializzazione separatamente una serie di artisti e una serie di canzoni, l'applicazione occupa modo più memoria rispetto a quando ha generato lo stesso valore di Catalogue
con insertSong
. Ho il sospetto che essa è causata dalla relazione tra la perduto stessi Artist
s di cui da Song
s e la Catalogue
, che è il motivo per cui ho copie di valori di Artist
che occupano memoria aggiuntiva.
L'unica soluzione che vedo è deserializzare prima l'insieme di artisti e quindi deserializzare il set di canzoni sostituendo con forza i valori di Artist
con quelli del primo set.
Quindi le mie domande sono:
- Ho ragione di mio sospetto?
- disposta la soluzione che vedo lavorare?
- Ci sono modi migliori per risolvere questo problema?
Grazie! Una buona idea sull'indicizzazione. –