我遇到了这段代码很慢的问题。 我试图优化它以使其更快但我不能。 你能给我一些建议吗?
这是java代码的一部分:
public ArrayList<String> kcal_spu(String tipo_pasto, String data) {
kcal_spuntino = new ArrayList<String>();
id_cibi_colazione = DiarioDataBaseAdapter.getId(tipo_pasto, data);
porzione_n2_colazione = DiarioDataBaseAdapter.getPorzione(tipo_pasto, data);
ArrayList<?> kcal2 = DiarioDataBaseAdapter.getKcal2(tipo_pasto, data);
int size = id_cibi_colazione.size();
int j = 0;
for (int i = 0; i < size; i++) {
double num_porz = Double.parseDouble(porzione_n2_colazione.get(j));
String getkcal = FoodDataBaseAdapter.getKcal(id_cibi_colazione.get(j));
String id_check = id_cibi_colazione.get(j);
if (id_check.equals("null")) {
double kcal_porz = Double.parseDouble(kcal2.get(j).toString());
double result = num_porz * kcal_porz;
kcal_spuntino.add("" + (int) result);
j = j + 1;
} else {
double kcal_porz = Double.parseDouble(getkcal);
double result = num_porz * kcal_porz;
kcal_spuntino.add("" + (int) result);
j = j + 1;
}
}
return kcal_spuntino;
}
这是函数DiarioDataBaseAdapter.getId:
public ArrayList getId(String tipo_pasto, String data) {
ArrayList array_list = new ArrayList();
Cursor res = db.rawQuery("SELECT ID_CIBO from Diario_Cibo where TIPO_PASTO = '" + tipo_pasto + "' AND DATA = '" + data + "'", null);
res.moveToFirst();
while (res.isAfterLast() == false) {
array_list.add(res.getString(res.getColumnIndex("ID_CIBO")));
res.moveToNext();
}
if (res != null) {
res.close();
}
return array_list;
}
这是函数DiarioDataBaseAdapter.getPorzione:
public ArrayList getPorzione(String tipo_pasto, String data) {
ArrayList array_list = new ArrayList();
Cursor res = db.rawQuery("SELECT PORZIONE from Diario_Cibo where TIPO_PASTO = '" + tipo_pasto + "' AND DATA = '" + data + "'", null);
res.moveToFirst();
while (res.isAfterLast() == false) {
array_list.add(res.getString(res.getColumnIndex("PORZIONE")));
res.moveToNext();
}
if (res != null) {
res.close();
}
return array_list;
}
这是函数DiarioDataBaseAdapter.getKcal2:
public ArrayList getKcal2(String tipo_pasto, String data) {
ArrayList array_list = new ArrayList();
Cursor res = db.rawQuery("SELECT KCAL from Diario_Cibo where TIPO_PASTO = '" + tipo_pasto + "' AND DATA = '" + data + "'", null);
res.moveToFirst();
while (res.isAfterLast() == false) {
array_list.add(res.getString(res.getColumnIndex("KCAL")));
res.moveToNext();
}
if (res != null) {
res.close();
}
return array_list;
}
提前致谢。
答案 0 :(得分:0)
您的数据库查询将是最慢的部分,其中有三个。在没有分析代码的情况下,我将从查看数据库选择和表开始,以确保它们具有正确的索引以便进行有效搜索。
否则,即使在代码中放入一个简单的纳秒计时器,也可以让您了解花费最多时间。
例如
long start = System.nanoTime();
// do stuff
long end = System.nanoTime();
System.out.println("time " + (end -start));