Ich sammle eine Reihe von Sensordaten in einem Service, speichern Sie es in eine SQL-Tabelle, und wenn der Benutzer auf eine Schaltfläche klickt, nehme ich alle diese SQL-Daten und speichern Sie sie in eine CSV-Datei , aber ich bekomme immer Window is full: requested allocation XXX
Fehler im LogcatAndroid Schreiben in CSV RAM Ausgabe
Von ein wenig googeln ich denke, das könnte aufgrund der hohen RAM-Nutzung auf meinem Nexus 5x sein?
Wenn der Benutzer auf die Schaltfläche Speichern klickt, um den Code beginnt der Prozess wie folgt aussieht:
File subjectFile = new File(subjectDataDir, subNum + ".csv");
try{
dbHelper.exportSubjectData(subjectFile, subNum);
} catch (SQLException | IOException e){
mainActivity.logger.e(getActivity(), TAG, "exportSubjectData error", e);
}
Da ist in meinem DBHelper, die exportSubjectData
Methode sieht wie folgt aus:
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();
}
Erstens ist diese Art von Problem normalerweise durch RAM-Nutzung verursacht?
Angenommen, mein Problem ist hohe RAM-Auslastung in diesem Codeabschnitt, gibt es einen effizienteren Weg, dies zu tun, ohne so viel Speicher zu verbrauchen? Die Tabelle, die versucht, in CSV zu schreiben, hat über 300.000 Zeilen und 10 Spalten