c - 读取大数据时有没有比 fscanf 更快的方法

标签 c optimization file-io

我正在努力处理大量结构化数据。我有一个包含姓名和门号的文件。我使用 fscanf 读取名称和数字,然后使用 fprintf 将它们存储在较小的文件中。

while ( fscanf(file, "%s %d", &people[i].name, &people[i].doorNum) > 0 ) {      
      ...
}

人是一个结构数组

typedef struct {                                        
   char* name;
   int doorNum;
}person;

我要读取的文件是 15 GB。我的目标是阅读它们并将其拆分为 1GB 的文件。它完美地工作,但需要超过 10 分钟。我该如何改进这些读写数据的过程呢?

最佳答案

你没有告诉我们你所说的“ split ”是什么意思。

可能将字段读取为字符串和整数是无用的(也许单个字符串或两个单独的字符串就足够了)。

编写自己的扫描函数,内置要匹配的模式知识,这样效率肯定会更高。即使编写自己的整数转换也应该更好。

关于c - 读取大数据时有没有比 fscanf 更快的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33282851/

相关文章:

java - 相对于程序放置输入文件

c# - 将多个文件合并为一个文件

c - C中的二进制搜索递归算法问题

c - 使用指针而不是数组时出现段错误

java - 性能优化 : C++ vs Java not performing as expected

c - Do..while 内部开关

java - 创建大文件(> 1GB)的最有效方法

c - 我应该在 C 中将 stdout 和 stdin 设置为无缓冲吗?

c - 如何调用带有指针变量的函数?

optimization - 谁以及何时在生产环境中使用递归代码