2017-03-08 5 views
0

Kürzlich habe ich versucht, Pointcloud-Daten in .txt-Datei mit C++ in Visual Studio 2010 zu schreiben. Am Anfang habe ich Ostream verwendet, um die Daten auszugeben, aber ich fand es langsam beim Schreiben der Daten.Wie schnell große Datenmengen in TXT-Dateien schreiben

Mein 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; 

Der Ausgang Punktwolke ist sehr groß, fast 0.5G. Es dauert Minuten, um in die .txt-Datei zu schreiben. Wie kann ich die Geschwindigkeit beim Schreiben der Daten verbessern? Ich dachte, es könnte das Problem der Größe des Cache-Puffers sein, aber nicht sicher. Kann mir jemand dabei helfen?

+0

Sie könnten std :: copy verwenden, um die Leistung zu verbessern. –

+0

Sind die Quelldaten ('pointcloud') alle im Arbeitsspeicher oder handelt es sich um einen Container-Wrapper für" cloudbasierte "Daten? Wenn es Letzteres ist, könnte Ihr Problem da sein ??? – franji1

+3

Holen Sie sich eine schnellere Festplatte und mehr RAM. Ihre Leistung ist durch die Geschwindigkeit Ihrer Festplatte begrenzt. Ohne die Gesetze der Physik dieses Universums zu ändern, ist die einzige Antwort schnellere Hardware. –

Antwort

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

nicht verursacht durch IO.If verwende ich outfile < < (std :: string) str.c_str(); (Str ist eine lange Zeichenfolge wie 200MB), Dies kann weniger als eine Sekunde dauern. So verwende ich Multithread, um die Daten in eine lange Zeichenfolge und Ausgabe durch IO-Stream zu spleißen.Die Geschwindigkeit wird um etwa 6 mal auf einem 4core erhöht Computer.

Verwandte Themen