2009-06-29 18 views

Respuesta

13

Solía ​​boost.serialization para almacenar las matrices y vectores que representan las tablas de búsqueda y algunos metadatos (cadenas) con un tamaño de memoria de alrededor de 200MByte. IIRC para cargar desde el disco en la memoria, tomó 3 minutos para el archivo de texto en lugar de 4 segundos utilizando el archivo binario en WinXP.

+0

Suena 3 minutos ... inexplicablemente lento. Esos no eran tipos de POD :) – sehe

1

Bench marcó un problema relacionado con la carga de una clase grande que contiene lotes (miles) de clases archivadas anidadas.

Para cambiar el formato, archivo utilización arroyos

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

en lugar de

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

El código para cargar el archivo (binario) se parece a:

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

Los archivos y WallTimes para una compilación optimizada de gcc del fragmento de código anterior son:

  • ascii: 820MB (100%), 32,2 segundo (100%).
  • binario: 620MB (76%), 14.7 segundos (46%).

Esto es de un disco de estado sólido, sin ninguna compresión de flujo.

Por lo tanto, la ganancia de velocidad es mayor de lo que sugeriría el tamaño del archivo, y obtienes una bonificación adicional mediante el uso de binarios.

Cuestiones relacionadas