2013-05-17 39 views
-1

从性能的角度来看,从XML文件读取大量数据或循环访问数组会更有益处?我有约2000个数据集我需要循环和做计算,所以我只是想知道是否会更好地导入所有的XML数据和处理它作为一个数组(单个大型导入)或导入每个数据集顺序(很多小的进口)。XML与阵列性能

想法和建议?

+0

“XML vs Array”实际上并不是你要求的。我建议你改变你的头衔。 –

+2

你的测试说什么? – I4V

+0

@ l4v - 我还没有测试过它,它需要修改一些代码,只是想在这一点上收集一些输入 – mikedugan

回答

1

如果我正确解释了你的问题,你需要从一个文件中加载2,000组数据,然后处理它们。所以你必须读取所有的数据并处理所有的数据。在基础层面上,有相同数量的工作要做。

所以我认为这个问题是“我怎么能早些完成相同的处理?”

考虑:

数据使用多少内存?如果内存容量超过1.5GB,则无法在32位个人电脑上一次处理,即使在64位电脑上,您也可能会看到虚拟内存分页查杀的性能。无论在哪种情况下,以较小的数据块流式传输数据都是必需的。相反,如果数据很小(例如,我所知道的2000条记录可能只有200kB),那么您可以通过在一个块中读取来获得更好的I/O性能,或者与处理相比,它会加载得太快时间没有试图优化它。

记录是否独立? (所以他们不需要按特定的顺序处理,并且你不需要在内存中存在一条记录来处理另一条记录)如果是这样,并且如果加载时间总体上显着,则“最佳”方法可能是为了平行操作 - 如果您可以在后台加载更多数据的同时处理某些数据,则可以更好地利用硬件,并在更短的时间内完成相同的工作。所以你可能想考虑将你的加载和处理分解到不同的线程上。

但是,如果加载时间比处理时间长,则将处理扩散到多个线程可能无助于您,因为处理线程在等待I/O时可能会饿死数据 - 所以使用1个处理线程可能会和处理线程一样快使用3或7.并且创建更多的线程比获得可用的CPU核心没有意义。如果使用多线程,我会写它来使用可配置/动态数量的线程,然后进行一些测试以确定最佳方法。

但在考虑所有这些之前,您可能需要考虑编写一个强力方法并查看性能如何。你甚至需要需要来优化它吗?

如果答案是“是的,我迫切需要优化它”,那么你能重新考虑数据格式吗? XML是一种非常有用但非常低效的格式。如果您遇到性能严重的情况,您是否可以做任何事情来缩小XML大小(例如,简单地使用较短的元素名称可以在大文件上产生巨大差异),甚至可以使用更紧凑和易读的二进制格式?

+0

那里有一些很棒的输入,谢谢...所以有一个问题...什么是XML和二进制之间的最佳中间地带,维护某种程度的人类可读性(二进制是“可读的”,但你明白了),同时更好地为程序使用优化? – mikedugan

+0

如果你想要人类可读的话,你可以使用xml,但为了使它更快阅读,请使用紧凑格式。例如。而不是“custonername”作为元素标签,像“cname”,“cust”或“cn”可能是“可读的”,但更短。 Xml读取趋势是相对于数据大小的线性时间,因此文件大小减半通常会导致加载时间变长。 –