什么是解析存储在ASCII大量浮点文件的最佳方式是什么?

什么是做的最快方法是什么?我记得使用ifstream的是坏的,因为它的工作的字节数小的有人告诉我,这将是更好的只是第一个文件读入到内存中。真的吗?

编辑:我正在运行在Windows,和文件格式用于存储在像arrow-R G B行的点云。我试图把它读成阵列。此外,文件是围绕每个20 MB,但我有GB价值约10人。

第二个编辑:我将要加载的文件,以显示我想要做一个可视化的每一次,所以这将是很好把它尽可能快的,但说实话,如果ifstream瓶坯合理,我不会”介意与可读代码粘连。它的运行相当慢的权利,但可能是更多的I / O限制比任何我可以在软件做的,我只是想确认硬件。

有帮助吗?

解决方案

我觉得你首先关注的应该是浮点数有多大。他们是否浮动或可以有双倍的数据呢?传统的(C)的方法是与格式说明对于浮动使用的fscanf和AFAIK它是相当快的。在输入输出流做解析数据方面增加一个小的开销,但是这是相当微不足道的。为了简便起见,我建议你使用输入输出流(更不用说平时流的功能,你会得到它)。

另外,我认为这将真正帮助社会,如果你能随着你的问题添加相关的数字,像例如,文件有多大你试图解析?这是一个小的内存占用环境(如嵌入式系统)。

其他提示

这一切都基于操作系统,以及C和C ++标准库的选择。

慢ifstream的的日子几乎结束,然而,有可能在处理C ++通用接口一些开销。

ATOF / strtod转换可能是对付它,如果字符串已经在内存中的最快方式。

最后,你会在得到该文件做任何尝试读入内存将可能是徒劳的。现代操作系统通常得到的方式(特别是如果该文件是比RAM你最终会交换代码,因为该系统会将您的(已存储在磁盘上)数据交换大)。

如果您真的需要可笑快(我认为这将是非常有用的唯一地方是HPC和Map / Reduce的基础的方法) - 尝试的mmap(的Linux / Unix)或MapViewOfFile来获取文件预取到虚拟内存最明智的做法,然后ATOF +定制的字符串处理。

如果该文件是真的很好举办这种比赛,你甚至可以用古怪和mmaps指针和具有转换多线程的。听起来像是如果你有以上的花车10GB到定期转换一个有趣的锻炼; Tibial。

在最快的方式可能是使用一个ifstream的,但你也可以使用的fscanf。如果你有一个特定的平台,可以将文件手工加载到存储器和手动解析从它浮子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top