Ich habe einige Probleme mit dem Schreiben in eine Datei - nämlich nicht in der Lage, schnell genug zu schreiben.Verbessern/optimieren Datei schreiben Geschwindigkeit in C++
Um zu erklären, ist mein Ziel, einen Datenstrom zu erfassen, der über Gigabit-Ethernet hereinkommt, und ihn einfach in einer Datei zu speichern.
Die Rohdaten werden mit einer Geschwindigkeit von 10MS/s empfangen und in einem Puffer gespeichert und anschließend in eine Datei geschrieben.
Nachfolgend finden Sie im entsprechenden Abschnitt des Code:
std::string path = "Stream/raw.dat";
ofstream outFile(path, ios::out | ios::app| ios::binary);
if(outFile.is_open())
cout << "Yes" << endl;
while(1)
{
rxSamples = rxStream->recv(&rxBuffer[0], rxBuffer.size(), metaData);
switch(metaData.error_code)
{
//Irrelevant error checking...
//Write data to a file
std::copy(begin(rxBuffer), end(rxBuffer), std::ostream_iterator<complex<float>>(outFile));
}
}
Das Problem, das ich bin der Begegnung ist, dass es zu lang nehmen die Proben in eine Datei zu schreiben. Nach etwa einer Sekunde meldet das Gerät, das die Proben sendet, dass sein Puffer übergelaufen ist. Nach einer kurzen Profilerstellung des Codes wird fast die gesamte Ausführungszeit auf std::copy(...)
verbracht (99,96% der Zeit, um genau zu sein). Wenn ich diese Zeile entferne, kann ich das Programm stundenlang ausführen, ohne dass es zu einem Überlauf kommt.
Das sagte, ich bin eher ratlos, wie ich die Schreibgeschwindigkeit verbessern kann. Ich habe mehrere Beiträge auf dieser Website durchgesehen, und es scheint, als ob der gebräuchlichste Vorschlag (in Bezug auf die Geschwindigkeit) darin besteht, Dateischreibvorgänge zu implementieren, wie ich es bereits getan habe - durch die Verwendung von std::copy
.
Wenn es hilfreich ist, führe ich dieses Programm auf Ubuntu x86_64. Irgendwelche Vorschläge würden geschätzt werden.
Dies ist über eine USRP, ist es nicht –
Intresting .... reine C Zeiger-ähnliche Richtung könnte Ihnen besser. Wenn Sie die Struktur Ihres Betriebssystems kennen, können Sie möglicherweise schneller auf den Speicher zugreifen. –
Ja ... Ich benutze eine USRP N210. – Mlagma