0

我正在编写一个c++需要更新打开文件(ofstream)中的一些字符的方法。
该方法将地图作为输入,其中键是偏移量(文件中的位置),值是字符。

代码示例

typedef map<int,char> IntChar_map;

void update_file(const IntChar_map& v)
{
    for(IntChar_map::const_iterator it = v.begin(); it != v.end(); ++it)
    {
        m_stream->seekp(it->first); 
        m_stream->put(it->second);  
    }
}

问题

假设文件很大并且地图中的偏移量是随机的。
如果我以相反的顺序遍历地图,它会提高性能吗?

谢谢。

4

1 回答 1

3

映射迭代器是有序的,因此您的文件 I/O 是本地化的并且可以利用缓冲。如果你反向浏览地图,偏移量仍然是有序的,因此是本地化的,所以你会得到类似的缓冲效果。

找出答案的最好方法是做一些测试并比较他们的时间。

对于带有搜索的小型写入,您可能会发现文件缓冲性能较差,您可能希望将其关闭。为此,您可以执行以下操作:

m_stream.setbuf(0, 0);

当我进行大量小的随机写入时,我对 C 文件 I/O 函数进行了一些综合测试,我发现使用纯无缓冲 I/O明显更快。这是我的问题的链接,以防它对您有用:

磁盘 I/O 期间幕后发生了什么?

如果性能至关重要,我再次强调使用不同编码方法对典型场景进行基准测试的重要性。

于 2013-11-07T07:53:38.967 回答