![]() |
1
7
您不必说您在哪个平台上,但如果它类似于Unix,那么您可能需要尝试read()系统调用,它不会执行fgets()等所做的额外缓冲层。这可能会使事情稍微加快,另一方面,它可能会很好地减慢事情的速度-唯一的方法是吸它看。 |
![]() |
2
4
|
![]() |
3
4
一次读取整个文件进入缓冲区。 处理来自该缓冲区的行。 这是最快的解决方案。 |
![]() |
4
3
您可以尝试通过将大量数据读取到RAM中,然后再进行相应的工作来尽量减少从磁盘读取所花费的时间。从磁盘读取速度很慢,因此通过读取(理想情况下)整个文件一次,然后处理它,可以将花费的时间减到最少。 类似于CPU缓存最小化CPU实际返回到RAM的时间的方式,您可以使用RAM最小化实际进入磁盘的次数。 |
![]() |
5
2
根据环境的不同,使用setvbuf()增大文件流使用的内部缓冲区的大小可能会提高性能,也可能不会提高性能。 这是语法-
其中inputfile是使用fopen()打开的文件的文件*,buffer_size是缓冲区的大小(由此调用为您分配)。 您可以尝试各种缓冲区大小,看看是否有任何积极的影响。请注意,这是完全可选的,运行时可能对该调用不做任何操作。 |
![]() |
6
2
如果数据来自磁盘,则可以绑定到IO。
如果是这样的话,就可以得到一个更快的磁盘(但首先要检查您是否充分利用了现有的磁盘……一些Linux发行版并不能优化磁盘访问。(
如果你没有IO限制,你可能会浪费很多时间来复制。您可以从所谓的零拷贝方法中获益。类似内存映射文件,只通过指针访问它。 这有点超出我的专业知识范围,所以你应该阅读或等待更多的知识帮助。 顺便说一句——你可能会投入比问题更大的工作;也许更快的机器可以解决你所有的问题…… NB——还不清楚您是否可以存储映射标准输入… |
![]() |
7
0
查看fread()。它对我来说读得更快,特别是当fread的buffer设置为65536时。缺点:您需要做大量的工作,并且基本上需要编写自己的getline函数来从二进制读取转换为文本。 退房: file I/O |
![]() |
8
0
如果操作系统支持,您可以尝试异步文件读取,也就是说,当CPU忙于做其他事情时,文件被读取到内存中。所以,代码是这样的: 十年
如果您有多个CPU,那么一个CPU读取文件并将数据解析为行,另一个CPU获取每一行并处理它。 |