2012-09-27 62 views
1

好吧,就像標題所說的那樣,當使用ormLite(使用android,如果它應該重要)對DAO對象執行queryForAll時,我遇到了一些性能問題。 。Android ORMlite性能問題queryForAll()

我實際上做的唯一的事情就是執行這樣的:

this.getHelper()getActivityDao()queryForAll(); (其中this.getHelper()返回從OrmLiteSqliteOpenHelper類擴展數據庫輔助)

這一條線需要在實際一輪約14秒,以執行......好吧,「活動」實體有大約80 fields和queryForAll返回一個長度爲74個對象的數組,但仍然 - 這不可能是正常的,可以嗎?

(日曆字段我使用

@DatabaseField(的dataType = DataType.SERIALIZABLE)

註釋,我不知道,如果這是日曆字段正確標註或者如果它可能導致性能問題......)

回答

3

這一行實際上需要約14秒才能執行......那麼,「活動」實體約80個字段和queryFo rAll返回一個長度爲74個對象的數組,但仍然 - 這不可能是正常的,可以嗎?或在每個對象的大量的數據 -

,除非,你可能會懷疑,你有一些數量在你的表對象的queryForAll()不應該需要很長的時間。在這種情況下,queryForAll()必須基本轉儲整個表並創建大量對象。

對於較大的查詢,建議使用,而不是傾倒整個表的迭代器:

http://ormlite.com/docs/iterator

例如,您可以通過所有在這樣的查詢對象的運行:

// page through all of the accounts in the database 
for (Account account : accountDao) { 
    // do something with each account here 
} 
+0

@以上,我沒有得到任何外來物或自動刷新收藏。 但似乎系統是相當快,如果我使用迭代器,而不是從DAO queryOfAll方法...我也意識到,它也更快,如果我只是在Android設備上使用應用程序,而不是通過我的電腦進行調試。所以現在查詢需要1-2秒,而且大概需要7-8秒,如果我在eclipse中通過調試模式...應該沒問題。 – user1502353

+0

好。對於使用ORMLite而言,性能會受到損失,但對通話做出正確的決定會改善@ user1502353的問題。 – Gray

+0

嗨,格雷!你可以給一些簡短的建議如何使用Android ListAdapter ormlite迭代器?或者可能CursorAdapter? – deviant

1

請問你的類是否有外部對象或集合,你會自動用OR刷新M&因此,我指的是例如用foreignAutoRefresh = true註解的成員或用@ForeignCollectionField(eager = true)註解的集合。這些註釋將代表您執行更多查詢。

如果是這樣的話,您可能會無意中拉回比您想象的更多的數據。在這種情況下,我會使用queryRaw(),並手動爲您所需的數據編寫連接語句。