GreenDao学習ノート6

2358 ワード

概要
refreshメソッド、および前の2つの問題.
refreshメソッド
  public void refresh() {
        if (myDao == null) {
            throw new DaoException("Entity is detached from DAO context");
        }    
        myDao.refresh(this);
    }

GreenDaoによって生成されたエンティティクラスには、データベースから値を取得してエンティティへの変更を上書きする方法があります.
△どこかでこの方法が使われると思いますか.
パフォーマンステスト
long startTime = System.currentTimeMillis();

        for (int i = 0; i != 400; i++) {

            Person person = new Person(null,i+"");
            personDao.insert(person);
        }

        long endTime = System.currentTimeMillis();

        Log.e("result",""+(endTime - startTime));

私は簡単な性能テストをして、400本のデータを挿入して、5秒を超えて、道理でデータベースを操作する時に新しいスレッドを開くことを提唱しました.
はい、何か間違っているに違いありません.
GreenDaoは、どのデータベース操作もトランザクションとして処理します.つまり、400トランザクションが実行されたということです.
daoSession.runInTx(new Runnable() {

                               @Override
                               public void run() {
                                   long startTime = System.currentTimeMillis();

                                   for (int i = 0; i != 400; i++) {

                                       Person person = new Person(null, i + "");
                                       personDao.insert(person);
                                   }

                                   long endTime = System.currentTimeMillis();
                                   Log.e("result", "" + (endTime - startTime));
                               }
                           }
        );

または
 long startTime = System.currentTimeMillis();

        Person[] persons = new Person[400];
        for (int i = 0; i != 400; i++) {
            persons[i] = new Person(null, i + "");
        }
        personDao.insertInTx(persons);

        long endTime = System.currentTimeMillis();
        Log.e("result", "" + (endTime - startTime));

時間はいずれも0.1以内です.
前者は適用性が高く,前者はスレッドを起動した.
こうして、冒頭の2つの問題は、1つ解決された.
close文はどこだ?
cursor.close()は,種々の操作の呼び出しにカプセル化され,関心を持たなくてもよい.
db.closeは本当に見つからなかったが、結局関係ないのは頭の痛い問題だ.
GreenDaoのやり方ではdbはライフサイクルを適用しています
kill processがアプリケーションを閉じ、システムリソースを回収すると、データベースリソースも自然に回収されます.