Android 写入 CSV RAM 问题

Android writing to CSV RAM issue

我正在服务中收集一堆传感器数据,将其存储到 SQL table 中,当用户单击一个按钮时,我会获取所有这些数据 SQL数据并将其保存到 CSV 文件,但我不断收到 logcat

中显示的 Window is full: requested allocation XXX 错误

通过一些谷歌搜索,我认为这可能是因为我的 Nexus 5x 内存使用率过高?

当用户点击保存按钮时,开始该过程的代码如下所示:

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 使用率很高,有没有更有效的方法来做到这一点而不消耗那么多内存?它试图写入 CSV 的 table 有超过 300,000 行和 10 列

我猜你正在使用 opencsv。您可以尝试在 csvWrite.writeNext(arrStr) 的每 x 次调用后调用 csvWrite.flush()。那应该将数据从内存写入光盘。 你必须尝试 x 的最佳值是多少。