开发Android应用程序时,我遇到了一个非常相关的问题(至少我认为是这样)。
例
我们在一个数据库上插入 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();
}
在第二个示例中,我们将对值对象进行"重置",因为它将在每一行中使用。
所以,我的问题是:我这样做对吗?使用第二种方法,我可以在不留下大量内存占用的情况下优化流程?如果没有,为什么?你对此有什么建议/想法吗?
这两个变量做错了。
请考虑以下情况:在第一次迭代中,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();
}