c – 从文件中读取大量数据并以有效的方式解析日期.如何提高海量数据的性能?

我正在从文件中读取大量数据:

//abc.txt

10  12  14  15  129

-12 14 -18  -900 -1234

145 12 13
12

32 68 51 76 -59 -025 

- - - - etc

fun(char *p, int x, int y, int z) {

}

我曾尝试使用atoi,strtok,但是当阵列太大且sscanf也非常慢时它们是实时消耗的.

如何改善大数据的性能?

我正在使用strtok进行解析.我正在寻找解析每一行的快速方法.

我正在读取每一行,然后解析每一行:

 char * ptr;
 ptr = strtok (str," ");
 while (ptr != NULL)
 {
    int value1 = atoi(ptr) ;
    ptr = strtok (NULL, " ");
 }

>有没有快速的方法将字符串解析为int?
>是否有任何替代方法比代码更快?我正在使用atoi将char *转换为int.
>我可以使用其他快速方法将char *转换为int吗?

最佳答案
你正在寻找错误的地方.除非你正在做一些真正奇怪的事情,否则问题不在于解析.在现代的N Ghz CPU上,每行所需的周期很小.杀死性能的是物理I / O.纺纱材料往往以10秒/秒的速度运转.

我还怀疑问题是文件的物理读取,因为这将有效地缓存在文件系统缓存中.

不,正如samy.vilar暗示的那样,这个问题几乎可以肯定是一个虚拟内存:

…the array is too huge…

使用系统监视器/ psinfo / top查看您的应用程序.几乎可以肯定,它正在增加一个大型工作集,因为它构建了一个内存阵列,而你的操作系统正在将其分配到磁盘.

所以忘记阅读是一个问题.您真正的问题是如何操作内存中的大量数据集.这里的方法是多种多样的:

>不要.批量处理数据并操纵批次.
>使用节省空间的存储(例如紧凑元素).
>分配更多内存资源.

围绕这个问题有很多讨论.

转载注明原文:c – 从文件中读取大量数据并以有效的方式解析日期.如何提高海量数据的性能? - 代码日志