繁体   English   中英

C ++ / seek-文件查找的哪个顺序更快?

[英]C++/seek - which order of file seek is faster?

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

代码样例

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);  
    }
}

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

谢谢。

映射迭代器是有序的,因此文件I / O已本地化并可以利用缓冲。 如果以相反的方式浏览地图,则偏移量仍然是有序的并因此被局部化,因此您将获得类似的缓冲效果。

找出答案的最佳方法是进行一些测试并比较它们的时间。

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

m_stream.setbuf(0, 0);

当我执行许多小的随机写入时,我对C文件I / O功能进行了一些全面的测试,我发现使用纯无缓冲I / O的速度明显更快。 如果对您有用,这是我的问题的链接:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM