[英]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的速度明显更快。 如果对您有用,这是我的问题的链接:
我再次强调,如果性能至关重要,则使用不同的编码方法对典型场景进行基准测试的重要性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.