【发布时间】:2017-06-12 01:17:51
【问题描述】:
我的应用程序需要使用最大为 5 GB 的 XML 文件中的数据。我在从 XML 分类的图像中加载数据。 Image 类有很多属性,比如 Path、Name、MD5、Hash 和许多其他类似的信息。
5 GB 的文件中包含大约 5000 万个图像数据,当我解析 xml 时,数据被加载到应用程序内,并且在应用程序内创建了相同数量的图像类,我对其执行不同的操作和计算.
我的问题是当我解析这样一个非常大的文件时,我的记忆会吃光。我猜所有的数据都加载到内存中。由于代码的复杂性,我无法提供整个代码。我有一种有效的方法来处理如此大量的课程。我做了一整夜的研究,但没有成功,有人能指出我正确的方向吗?
谢谢
【问题讨论】:
-
我假设您知道不要使用 DOM 解析器,而是使用 SAX 或 StAX 等流解析器,对吧?但你没有提到这一点——为什么?您究竟如何解析数据?
-
我使用 SAX 解析器,但由于数据量如此之大,应用程序内存占用了 5000 万个图像对象,如果我增加内存,应用程序可以正常工作。应用程序数据也可以从 sqlite 加载,我也从那里得到同样的问题,问题是数据量如此之大,我猜如此大量的对象都在 RAM 内。
-
是的,在解析 xml 后,如果我想将来使用数据,数据会保存在 sqlite 中,我可以从 sqlite 中加载,这比解析 xml 快得多,但是当数据量超过,图像类有重要参数,如图像路径,名称,所以我必须将所有数据加载回应用程序,再次创建相同数量的对象,