2012-10-16 23 views
0

我在HTC Sensation上遇到了android 2.3.4和4.0.3之間巨大的性能差異。4.0.5上的Ormlite性能(ICS)

一些額外的信息:

  • ormlite版本4.42
  • ,這是讓我道使用DaoManager和DAO單。
  • 使用批處理任務插入
  • 我想createorupdate 30個對象(僅創造需要同一時間)
  • 這些都是單個對象(無關係),但有一長串的領域。

時間日誌:

ICS(4.0.3)

10-16 09:17:06.206: 1 getting dao 
10-16 09:17:06.206: 2 got dao 
10-16 09:17:06.206: 2 start call batch task 
10-16 09:17:06.216: 3 start initializing batch_task 
10-16 09:17:06.326: 121 finished initializing batchtask 
10-16 09:17:06.836: 623 end batch task 

2.3.4

10-16 09:20:00.355: 0 getting dao 
10-16 09:20:00.355: 1 got dao 
10-16 09:20:00.355: 1 start call batch task 
10-16 09:20:00.355: 1 start initializing batch_task 
10-16 09:20:00.435: 87 finished initializing batchtask 
10-16 09:20:00.445: 96 end batch task 

正如你可以看到ICS需要創造更多的時間。

我應該怎麼做才能在ICS上獲得類似的性能?

+0

這裏沒有問題嗎? – TZHX

+0

因此,createOrUpdate速度較慢,但​​創建速度相同? – Gray

+0

這是在設備上還是在模擬器上運行? – Gray

回答

3

因此,在評論中來回之後,事實表明,Android ICS的性能差異可能是由於默認情況下,在該版本中,SQLite可能以「TRUNCATE」日記模式運行。從Sqlite docs

TRUNCATE日記模式通過截斷回滾日誌爲零長度而不是刪除它來提交事務。在很多系統上,截斷文件比刪除文件要快得多,因爲包含的目錄不需要改變。

2.3.4比較運行在Write-Ahead-Logging(WAL)模式。我想WAL會更快。

要更改日誌中ORMLite,你會做(我猜)類似如下:

someDao.rawExecute("PRAGMA journal_mode = WAL;"); 

更多的例子見Sqlite PRAGMA docs

1

最後,我找到了解決辦法:

getHelper().getDao(); 
SQLiteDatabase db = getHelper().getWritableDatabase(); 
Cursor cursor = db.rawQuery("PRAGMA journal_mode = WAL;", null); 

只有這樣的工作。

其他附加信息這個問題:

  • 我有2個HTC感覺,兩者都更新到ICS,所以4.0.3
  • 但軟件數量是不同的! (3.33.401.53和3.33.401.6),並且設備上沒有可用的更新(這很奇怪)。我真的不明白髮生了什麼,也許他們改變了構建之間的默認日記模式?

因此,如果您有慢速數據庫功能,請檢查db上的第一個日誌模式。謝謝格雷,爲您提供幫助。

+4

是否有一個原因,我的答案沒有回答你的問題?無論哪種方式,你都應該接受其中之一。 – Gray