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 的最佳值是多少。
我正在服务中收集一堆传感器数据,将其存储到 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 的最佳值是多少。