2014-02-18 198 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