在开发Android应用程序时,我遇到了一个非常相关的问题(至少我认为是这样)。
示例
我们在db(一次)上插入10000行。
db.beginTransaction();
try{
for(Object toInsert: listOfObjects) {
ContentValues values = new ContentValues();
//put the values on the object
values.put(key, toInsert.getValue());
db.insert(columnName, null, values);
}
db.setTransactionSuccessful();
} catch(Exception e) {
//handle exception
} finally {
db.endTransaction();
}
我们在循环中创建了10000个新的ContentValue对象。而VM的对象创建非常昂贵。 如果我们稍微修改一下呢?
不同方法
ContentValues values, hack = new ContentValues();
db.beginTransaction();
try{
for(Object toInsert: listOfObjects) {
values = hack;
//put the values on the object
values.put(key, toInsert.getValue());
db.insert(columnName, null, values);
}
db.setTransactionSuccessful();
} catch(Exception e) {
//handle exception
} finally {
db.endTransaction();
}
在第二个例子中,我们对值对象进行'重置',因为它将在每一行中使用。
所以,我的问题是:我这样做了吗?使用第二种方法,我是在优化流程而不留下大量内存?如果没有,为什么?你对此有什么建议/想法吗?
答案 0 :(得分:1)
你对这两个变量做错了。
考虑以下情况:
在第一次迭代中,values = new instance
,hack = new instance
。好。
在你values = hack
之后。 values
和hack
现在都指向相同的内存位置。因此创建两个变量毫无意义。
您可以简单地执行以下操作:
ContentValues values = new ContentValues();
db.beginTransaction();
try{
for(Object toInsert: listOfObjects) {
//put the values on the object
values.put(key, toInsert.getValue());
db.insert(columnName, null, values);
}
db.setTransactionSuccessful();
} catch(Exception e) {
//handle exception
} finally {
db.endTransaction();
}