2017-03-08 1 views
0

Récemment, j'essayais d'écrire des données pointcloud dans un fichier .txt en utilisant C++ dans Visual Studio 2010. Au début, j'ai utilisé ostream pour sortir les données, mais je l'ai trouvé lent lors de l'écriture des données.Comment rapidement écrire de grandes quantités de données dans des fichiers txt

Mon code:

std::ofstream outfile; 
outfile.open(filename.c_str()); 
for(int index = 0;index < pointcloud.size();index++){ 
    outfile<<pointcloud[index].x<<pointcloud[index].y<<pointcloud[index].z 
    <<pointcloud[index].r<<pointcloud[index].g<<pointcloud[index].b<<'\n'; 
} 
outfile<<std::endl; 

Le nuage de points de sortie est très énorme, presque 0.5G. Il faut quelques minutes pour écrire dans le fichier .txt. Comment puis-je améliorer la vitesse d'écriture des données? Je pensais que ce pourrait être le problème de la taille du tampon de cache, mais pas sûr. Quelqu'un peut il m'aider avec ça?

+0

Vous pouvez utiliser std :: copy pour améliorer les performances. –

+0

Les données source ('pointcloud') sont-elles toutes en mémoire, ou s'agit-il d'une enveloppe de conteneur pour les données« basées sur le nuage »? Si c'est le dernier, votre problème peut être là? – franji1

+3

Obtenez un disque dur plus rapide, et plus de RAM. Votre performance est limitée par la vitesse de votre disque dur. À moins de changer les lois de la physique de cet univers, la seule réponse est un matériel plus rapide. –

Répondre

0
I have found a way to solve this problem myself.The performance bottlenecks is 

pas causé par IO.If J'utilise outfile < < (std :: string) str.c_str(); (Str est une longue chaîne comme 200MB), Cela peut prendre moins d'une seconde.J'utilise donc multithread pour épisser les données dans une longue chaîne et la sortie par flux IO.La vitesse est augmentée par environ 6 fois sur un 4core ordinateur.