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

标签 c++ c performance optimization

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

//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) {

}

我尝试过使用atoistrtok,但是当数组太大并且sscanf也是时,它们是实时耗时的很慢。

如何提高海量数据的性能?

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

我正在阅读每一行,然后将每一行解析为:

 char * ptr;
 ptr = strtok (str," ");
 while (ptr != NULL)
 {
    int value1 = atoi(ptr) ;
    ptr = strtok (NULL, " ");
 }
  • 有没有什么快速的方法可以将字符串解析成int
  • 是否有比上述代码更快的替代方法?我正在使用 atoichar * 转换为 int
  • 我可以使用其他快速方法将 char * 转换为 int 吗?

最佳答案

你找错地方了。问题不在于解析,除非您正在做一些真正奇怪的事情。在现代 N Ghz CPU 上,每行所需的周期很小。扼杀性能的是物理 I/O。旋转的东西往往以 10 秒/秒的速度运行。

我也怀疑问题出在文件的物理读取上,因为这将有效地缓存在文件系统缓存中。

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

...the array is too huge...

使用系统监视器/psinfo/top 查看您的应用程序。几乎可以肯定的是,当它建立一个内存阵列时,它正在增长一个大型工作集,并且您的操作系统正在将其分页到磁盘。

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

  • 不要。对数据进行批处理并操作批处理。
  • 使用节省空间的存储(例如紧凑元素)。
  • 分配更多内存资源。

SO 上有很多关于这个的讨论。

关于c++ - 从文件中读取大量数据并以有效的方式解析日期。如何提高海量数据的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11077423/

相关文章:

C: 为什么释放 int** 数组没有完成?

c++ - 无法设置 Windows Media Video 9 屏幕编码器

c++ - 从2个矩形中获取交点

c - 如何从十六进制值中提取低位字节?

arrays - Excel VBA 数组 - 写入事务数据

java - instanceof运算符java的复杂性

java - 服务器上的多线程应用程序比单线程慢(与 JUnit 测试不同)

C++ 获取分配节的基地址

c++ - Mat的单 channel 作为矩阵Opencv

C:创建随机生成的整数,将它们存储在数组元素中,并打印每个元素中存储的整数数量