2016-04-22 28 views
3

私はサービス内のセンサーデータを集めてSQLテーブルに格納しています。ユーザーがボタンをクリックすると、そのSQLデータをすべて取り出してCSVファイルに保存しますしかし、私はWindow is full: requested allocation XXXログカットにエラーが表示され続けるAndroidのCSV RAMへの書き込み

これは私のNexus 5xでのRAM使用率が高いためだと思いますか?

ユーザーがボタンを保存するクリックすると、プロセスを開始するためのコードは次のようになります。

File subjectFile = new File(subjectDataDir, subNum + ".csv"); 

try{ 
    dbHelper.exportSubjectData(subjectFile, subNum); 
} catch (SQLException | IOException e){ 
    mainActivity.logger.e(getActivity(), TAG, "exportSubjectData error", e); 
} 

はその後、私のDBHelperで、exportSubjectData方法は次のようになります。

まず
public void exportSubjectData(File outputFile, String subNum) throws IOException, SQLException { 

    csvWrite = new CSVWriter(new FileWriter(outputFile)); 

    curCSV = db.rawQuery("SELECT * FROM " + DATA_TABLE_NAME + " WHERE id = " + subNum, null); 

    csvWrite.writeNext(curCSV.getColumnNames()); 

    while (curCSV.moveToNext()) { 

     String arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2), 
       curCSV.getString(3), curCSV.getString(4), curCSV.getString(5), 
       curCSV.getString(6), curCSV.getString(7), curCSV.getString(8), 
       curCSV.getString(9), curCSV.getString(10)}; 

     csvWrite.writeNext(arrStr); 
    } 

    csvWrite.close(); 
    curCSV.close(); 
} 

、 RAMの使用によって通常発生するこの種の問題ですか?

私の問題は、コードセクションでのRAMの使用量が多いことを前提とすると、これほど多くのメモリを消費することなくこれを行うより効率的な方法がありますか? CSVに書き込もうとしているテーブルが300,000行以上10列以上ある

答えて

0

あなたはopencsvを使っていると思います。試してみることができるのは、毎x csvWrite.writeNext(arrStr)のコールの後にcsvWrite.flush()と呼ぶことです。それはメモリからディスクにデータを書き込む必要があります。 xの最適値を試してみる必要があります。

関連する問題