我在写入文件时遇到了一些问题——即写入速度不够快。
解释一下,我的目标是捕获通过千兆以太网传入的数据流并将其保存到文件中。
原始数据以 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 上运行这个程序。任何建议,将不胜感激。