gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:38:55 24 4
gpt4 key购买 nike

我正在编写一个 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);
}
}

问题

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

谢谢。

最佳答案

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

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

对于带有查找的小型写入,您可能会发现文件缓冲的性能较差,您可能希望将其关闭。为此,你可以这样做:

m_stream.setbuf(0, 0);

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

What goes on behind the curtains during disk I/O?

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

关于C++/seek - 哪种文件查找顺序更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19830411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com