approccio alternativo di serializzazione binaria / de-serializzazione

1

È possibile convertire una lista di oggetti direttamente in byte [] (e viceversa) per ottenere prestazioni (evitando la serializzazione / de-serializzazione)?

Quello che ho in mente è che una lista è da qualche parte in memoria (heap). Se potessi leggere i byte in heap per la mia lista potrei semplicemente assegnargli una variabile (di byte []) nel mio programma. È possibile? e in caso affermativo, come posso recuperare l'elenco originale da byte [] senza eseguire la serializzazione utilizzando BinaryFormatter?

    
posta asif 17.04.2014 - 15:42
fonte

1 risposta

4

L'heap .NET è un grafo di oggetti, solo i tipi blittabili avranno un blocco di memoria contiguo da analizzare. Se si pinned un oggetto e tutto ciò a cui si fa riferimento, e tutto ciò che fa riferimento ricorsivo ricorsivamente l'intero grafico dell'oggetto che si desidera serializzare, si potrebbe iniziare a camminare il grafo degli oggetti raschiando tutto in un array di byte contiguo logicamente. Senza bloccare, il GC sposterebbe quegli oggetti in modo da non essere in grado di seguire i loro collegamenti di memoria per sapere dove raschiare i dati dalla memoria.

Ma questo non ti sarebbe di certo di aiuto perché dovresti raschiare oggetti che hanno puntatori agli indirizzi di memoria, e per ricostruire il grafo degli oggetti dovrai riutilizzare quegli esatti indirizzi di memoria per tutti i puntatori da allineare - non hai modo di sapere se quegli indirizzi di memoria sarebbero disponibili in un altro momento. In alternativa dovresti scavare nello spazio di memoria di quegli oggetti; identifica i membri del puntatore e modifica gli indirizzi che hanno indicato per indicarli dove costruisci i relativi nodi. Questo sarebbe un valore assoluto di lavoro solo per evitare la serializzazione, che è molto meno lavoro e meno pericoloso.

    
risposta data 17.04.2014 - 16:09
fonte

Leggi altre domande sui tag