优化性能java“;至于;及;数组字符串";
我对这段代码的速度有问题。 我试图优化它,使它更快,但我不能。 你能给我一些建议吗 这是java代码的一部分:优化性能java“;至于;及;数组字符串";,java,arrays,for-loop,Java,Arrays,For Loop,我对这段代码的速度有问题。 我试图优化它,使它更快,但我不能。 你能给我一些建议吗 这是java代码的一部分: public ArrayList<String> kcal_spu(String tipo_pasto, String data) { kcal_spuntino = new ArrayList<String>(); id_cibi_colazione = DiarioDataBaseAdapter.getId(tipo_pas
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.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;
}
提前感谢。您的数据库查询将是最慢的部分,共有三个查询。在不分析代码的情况下,我将首先查看数据库选择和表,以确保它们具有正确的索引,从而实现高效搜索 否则,即使在代码中加入一个简单的纳秒计时器,也会让您知道什么东西花费的时间最多 例如
你试过分析这段代码吗?可能是数据库操作时间可能会支配总执行时间,代码优化可能不会带来太多收益。可能比StackOverflow更适合CodeReview谢谢您的快速回复。如何创建索引表以优化搜索?我会先分析一下,然后再使用简单的纳秒计时器方法来确定这是否是问题所在。表的主键将已具有索引。这个链接将有助于:好的,现在我分析代码,并告诉您在哪里花费时间。好的,这将是有趣的,让我们知道数字。
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;
}
long start = System.nanoTime();
// do stuff
long end = System.nanoTime();
System.out.println("time " + (end -start));