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();
}
この 2 番目の例では、値オブジェクトを「リセット」します。これは、すべての行で使用されるためです。
ですから、私の質問は次のとおりです。私はこれを正しく行っていますか? 2番目のアプローチでは、大きなメモリフットプリントを残さずにプロセスを最適化していますか? そうでない場合、なぜですか?これについて何か提案や考えはありますか?