Domanda

Devo preferire la serializzazione binaria oltre ascii / serializzazione testo, se le prestazioni è un problema?

Qualcuno ha provato su una grande quantità di dati?

È stato utile?

Soluzione

Ho usato boost.serialization per memorizzare le matrici e vettori che rappresentano tabelle di ricerca e alcuni metadati (stringhe) con una dimensione in memoria di circa 200MByte. IIRC per il carico da disco in memoria ci sono voluti 3 minuti per il testo dell'archivio vs 4 secondi utilizzando l'archivio binario su WinXP.

Altri suggerimenti

benchmark per un problema che coinvolge il caricamento di una grande classe che contiene un sacco (migliaia) di classi nidificate archiviate.

Per modificare il formato, utilizzare i flussi di archivio

boost::archive::binary_oarchive
boost::archive::binary_iarchive

anziché

boost::archive::text_oarchive
boost::archive::text_iarchive

Il codice per caricare l'archivio (binario) appare come:

std::ifstream ifs("filename", std::ios::binary);
boost::archive::binary_iarchive input_archive(ifs);
Class* p_object;
input_archive >> p_object;

I file e le WallTimes per una build gcc ottimizzata del frammento di codice di cui sopra sono:

  • ascii:. 820MB (100%), 32.2 secondi (100%)
  • binario. 620MB (76%), 14,7 secondi (46%)

Questo è da un disco a stato solido, senza alcuna compressione del flusso.

Quindi, il guadagno in termini di velocità è maggiore di quelle del file suggerirebbe, e si ottiene un ulteriore bonus usando binario.

Vi suggerisco di guardare in protobuf - buffer protocollo se la prestazione è un problema

"buffer protocollo" da .Net

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