C ++将大型数组写为CSV到磁盘

时间:2018-02-05 16:58:45

标签: performance csv image-processing file-io c++14

我试图将图像从相机写入磁盘。为了使下游后处理变得简单,我们选择使用CSV格式(其他系统我们使用这种格式而不是二进制格式)。问题是写一个1MB的图像需要大约1秒钟。

我希望将此速度提高至少10倍。理想情况下,我们维护CSV格式,但如果需要,我们可以移动到二进制文件。这一切都在WIN 10机器上运行,并使用VS 2017进行编译。

以下代码效率低下,但打印出的矩形图像是','像素之间的描绘。我确信99%的低效率来自每个循环的百万次重复IO请求,但我不确定如何追加','没有这样的东西......

int toCSV(uns16 * bufferCopy, uns32 bufsize, uns32 imgWidth, string directory, string fileout)
{
    std::ofstream outputFile(directory + fileout);
    for (uns32 i = 0; i < bufsize; i++)
    {
        outputFile << (bufferCopy[i]);
        if (i % (imgWidth+1) < imgWidth)
            outputFile << ",";
        else
            outputFile << "\n";
    }
    outputFile.close();
    return 0;
}

输出的示例如下所示(只需~400x~600行):

32.323,23.456,54.323,45.332
45.343,73.846,35.328,15.842
32.323,23.456,54.323,45.332
45.343,73.846,35.328,15.842

更新

如果我转到二进制格式,我将使用以下问题作为参考代码: Writing a binary file in C++ very fast

0 个答案:

没有答案