关于内存占用的想法



开发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 instancehack = new instance 。还行。在你做values = hack之后. valueshack现在都指向相同的内存位置。因此,创建两个变量是没有意义的。

您可以简单地执行以下操作:

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();
}

相关内容

  • 没有找到相关文章

最新更新