2010-02-15 41 views
2

C++的问题。std :: istream ::得到效率

for(i=1;i<10000;i++){ 
    cout << myfile.get(); 
} 

将编程就在HDD中的文件10000个IO操作? (假定文件较大) 如果是这样,也许最好是读取512字节到某个缓冲区,然后从那里接受字符char,然后再复制512字节等等?

回答

1

您的操作系统会缓存该文件,因此您不需要优化该文件以便于常用。

1

ifstream被缓冲,所以没有。

+1

它不会发出10000个IO请求,但它仍然比在一次调用中读取那些10KB慢得多。 – jalf

1

试试吧。

但是,在许多情况下,最快的操作将是一次读取整个文件,然后处理内存中的数据。

但是,真的,尝试每种策略,并看看哪些最好。

但请记住,不管底层文件缓冲机制如何,一次读取一个字节是slow。如果没有别的,它可以调用相当慢的IOStreams库10000次,当你可以完成几个调用。

2

正如其他人所说 - 尝试。我已经做过的测试表明,一次读取大块(使用流)的速度可能快于单独依赖流自身缓存的速度的两倍。但是,这取决于像缓冲区大小和(我期望)流库实现 - 我使用g ++。