Domanda

Devo serializzare un oggetto che contiene uno std :: vector in grado di contenere migliaia di membri, con quel vettore dimensioni la serializzazione non scala bene.

In base alla documentazione, Boost offre invece una involucro matrice classe che avvolge il vettore per ottimizzazioni ma genera lo stesso output xML. Immersioni nel codice spinta, ho trovato una classe denominata use_array_optimization che sembra controllare l'ottimizzazione, ma è in qualche modo disattivata di default. Ho anche provato a ignorare la funzione Serialize senza risultati.

Mi piacerebbe sapere come attivare che ottimizzazioni in quanto i documenti a spinta non sono chiare.

Grazie in anticipo

È stato utile?

Soluzione 2

Infine, ho usato il BOOST_SERIALIZATION_SPLIT_MEMBER () macro e codificato due funzioni per caricare e salvare. La funzione Save appare come:

template<class Archive>
void save(Archive & ar, const unsigned int version) const
{
    using boost::serialization::make_nvp;
std::string     sdata;
Vector2String(vData, sdata);
ar & boost::serialization::make_nvp("vData", sdata);
}

La funzione Vector2String prende semplicemente i dati in formato vettoriale e ad uno std :: string. La funzione di caricamento utilizza una funzione che inverte la codifica.

Altri suggerimenti

L'idea alla base l'ottimizzazione array è che, per gli array di tipi che possono essere archiviati semplicemente "dumping" la loro rappresentazione come-è l'archivio, "dumping" l'intero array in una volta è più veloce di "dumping" un elemento dopo l'altro.

ho capito dalla tua domanda che si sta utilizzando l'archivio XML. L'ottimizzazione matrice non è applicabile in questo caso, perché la serializzazione degli elementi implica una trasformazione comunque.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top