LoginSignup
2
3

More than 5 years have passed since last update.

ORMLiteはDAOの生成は思ったほど時間がかからない。

Posted at

ORMLiteを使うときの注意点として、DAOの生成はコストがかかるので使いまわした方がいいっていう記事があるので、時間だけでも計測してみました。
こちらの記事を参考にさせてもらいました。
http://qiita.com/opengl-8080/items/133314cfed9b3b404572

テストコードでこんな感じのソースを作ってみます。

HogeHoge hogehogeEntity = new HogeHoge();
long count = 1000;
//ヘルパー作成
ORMDatabaseHelper helper = new ORMDatabaseHelper(loginActivity);

Calendar startCal = null;
Calendar endCal = null;

/*都度DAOを生成する*/
startCal = Calendar.getInstance();
for(int i = 0;i < count;i++){
    Dao<HogeHoge,Long> dao = helper.getDao(HogeHoge.class);
    dao.createOrUpdate(hogehogeEntity);
}
endCal = Calendar.getInstance();
Log.i(TAG, "同じhelperで毎度DAOを生成した場合(ミリ秒):" + (endCal.getTimeInMillis() - startCal.getTimeInMillis()));

/*DAOを事前に生成しておき、都度DAOを生成する*/
Dao<HogeHoge,Long> dao2 = helper.getDao(HogeHoge.class);
startCal = Calendar.getInstance();
for(int i = 0;i < count;i++){
    dao2.createOrUpdate(hogehogeEntity);
}
endCal = Calendar.getInstance();
Log.i(TAG,"同じhelperでDAOを使いまわした場合(ミリ秒):" + (endCal.getTimeInMillis() - startCal.getTimeInMillis()));

結果なんですが、ほとんど変わらなかったです。

1回目。
同じhelperで毎度DAOを生成した場合(ミリ秒):2402
同じhelperでDAOを使いまわした場合(ミリ秒):2174

2回目。
同じhelperで毎度DAOを生成した場合(ミリ秒):2329
同じhelperでDAOを使いまわした場合(ミリ秒):2338

何度やっても0.3秒以内の差にしかならず、それほど目立った差にはなりませんでした。
少なくとも時間的な意味では、DAOを生成しても使いまわしても、あんまし差が無いかもしれないです。
ディスクアクセスの量とかもっと詳しい見方をすると違うのかもしれんですが…。

モデルクラスとか設計するときに「DAOを使いまわせるように設計しないとなー」と悩んでいる方々は、思い切って使い切りにしちゃうのも良いかと思います。
helperの生成にはすごく時間かかりましたので、helperは多分使いまわした方がいいと思いますが…。

2
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3