我在写文件时遇到了一些问题-主要是无法写入得足够快。
为了解释清楚,我的目标是捕获通过千兆以太网传入的数据流并将其简单保存到文件中。
原始数据以10MS/s的速率传入,然后保存到缓冲区,随后写入文件。
下面是相关代码的部分内容:
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));
}
}
我遇到的问题是将样本写入文件的时间太长了。大约过了一秒钟,发送样本的设备报告其缓冲区已溢出。通过对代码进行快速分析,几乎所有执行时间都花费在
std::copy(...)
上(确切地说是99.96% 的时间)。如果我删除这行代码,则可以运行程序数小时而不遇到任何溢出。话虽如此,我还是对如何提高写入速度感到困惑。我查看了这个网站上的几篇文章,似乎最常见的建议(关于速度)是实现文件写入,就像我已经做的那样——通过使用
std::copy
。如果有帮助的话,我正在Ubuntu x86_64上运行此程序。欢迎提出任何建议。