2014-02-18 178 views
1

目前我正在研究一个Android应用程序,我需要将Csv文件中的数据插入到数据库中。该Csv文件有超过2.5lakhs的数据。内存不足错误-Android

有没有什么办法可以将Csv文件直接转换成.db格式?

信息:Csv文件的大小是8 Mb。

我试了一下:

起初,我尝试解析在我的应用CSV文件,插入1000的数据,并成功地做到了。但是,当检索和存储List中的数据时,我得到了OutOfMemoryError。

有什么办法可以整理出来吗?

+1

什么是'2.5lakhs'?你是如何试图读取文件的? – WarrenFaith

+0

'2.5lahks'看起来像'bazzilions'确实>) – injecteer

+0

250000字符串objects.Yes我试过了,但它需要太多时间,所以我创建1000个数据的另一个文件。实际上,问题发生时,我在列表中存储1000个对象。 – Ram

回答

2

您不应该将整个文件一次加载到内存中。使用流式处理的方法,在这里您逐行处理文件(例如LineNumberReader)并单独处理每一行,以便JVM必须仅将实际行保留在RAM中。

您也可以使用批处理,比如说1000行来处理一个坐标。这样可以提高速度(减少数据库交易量),同时将内存占用降至最低。

也尝试最大化对象的重用率,避免不必要的创建。

+0

实际上,当我在List中存储1000个对象时会发生问题。是否有类似ArrayList对象的任何东西只能存储一些有限数量的数据?是否由于内存泄漏而发生内存不足错误?如果是,那么向List中添加对象会导致内存泄漏? – Ram

+0

不要将对象永久存储在列表中。在每个100行的csv文件后面刷新列表(使用'list.clear()')。你得到OOE不是因为内存泄漏,而是因为android的内存(堆?)限制。 – injecteer