我正在服务中收集一堆传感器数据,将其存储到 SQL 表中,当用户单击一个按钮时,我会获取所有这些 SQL 数据并将其保存到 CSV 文件中,但我不断收到 Window is full: requested allocation XXX
logcat 中显示错误
通过一些谷歌搜索,我认为这可能是因为我的 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 的表有超过 300,000 行和 10 列
最佳答案
我猜你正在使用 opencsv。您可以尝试在每调用 x 次 csvWrite.writeNext(arrStr)
之后调用 csvWrite.flush()
。那应该将数据从内存写入光盘。
您必须尝试 x 的最佳值是多少。
关于java - Android 写入 CSV RAM 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36786469/