您好,登錄后才能下訂單哦!
交換數據格式
Google 推出的 Protocal Buffers 是一種更輕便高效的存儲結構,但消耗內存較大。
FlatBuffers 同樣由 Google 推出,專注性能,適合移動端。占用存儲比 Protocal 要大。
SharePreferences 優化
Bitmap 解碼
數據庫優化
1、使用 StringBuilder 代替 String
2、查詢時返回更少的結果集及更少的字段
查詢時只取需要的字段和結果集,更多的結果集會消耗更多的時間及內存,更多的字段會導致更多的內存消耗。
3、少用 cursor.getColumnIndex
根據性能調優過程中的觀察 cursor.getColumnIndex 的時間消耗跟 cursor.getInt 相差無幾。可以在建表的時候用 static 變量記住某列的 index,直接調用相應 index 而不是每次查詢。
4、異步線程
Android 中數據不多時表查詢可能耗時不多,不會導致 ANR,不過大于 100ms 時同樣會讓用戶感覺到延時和卡頓,可以放在線程中運行,但 sqlite 在并發方面存在局限,多線程控制較麻煩,這時候可使用單線程池,在任務中執行 db 操作,通過 handler 返回結果和 UI 線程交互,既不會影響 UI 線程,同時也能防止并發帶來的異常。
5、SQLiteOpenHelper 維持一個單例
因為 SQLite 對多線程的支持并不是很完善,如果兩個線程同時操作數據庫,因為數據庫被另一個線程占用, 這種情況下會報“Database is locked” 的異常。所以在數據庫管理類中使用單例模式,就可以保證無論在哪個線程中獲取數據庫對象,都是同一個。
最好的方法是所有的數據庫操作統一到同一個線程隊列管理,而業務層使用緩存同步,這樣可以完全避免多線程操作數據庫導致的不同步和死鎖問題。
6、Application 中初始化
7、少用 AUTOINCREMENT
主鍵加上 AUTOINCREMENT 后,可以保證主鍵嚴格遞增,但并不能保證每次都加 1,因為在插入失敗后,失敗的行號不會被復用,會造成主鍵有間隔,繼而使 INSERT 耗時 1 倍以上。
這個 AUTOINCREMENT 關鍵詞會增加 CPU,內存,磁盤空間和磁盤 I/O 的負擔,所以 盡量不要用,除非必需。通常情況下都不是必需的。
事務
使用事務的兩大好處是原子提交和更優性能:
主要三個方法:beginTransaction,setTransactionSuccessful,endTransaction。
SQLiteStatement
使用 Android 系統提供的 SQLiteStatement 來插入數據,在性能上有一定的提高,并且也解決了 SQL 注入的問題。
SQLiteStatement statement = dbOpenHelper.getWritableDatabase().compileStatement("INSERT INTO EMPERORS(name, dynasty, start_year) values(?,?,?)"); statement.clearBindings(); statement.bindString(1, "Max"); statement.bindString(2, "Luk"); statement.bindString(3, "1998"); statement.executeInsert();
SQLiteStatement 只能插入一個表中的數據,在插入前要清除上一次的數據。
索引
索引就像書本的目錄,目錄可以快速找到所在頁數,數據庫中索引可以幫助快速找到數據,而不用全表掃描,合適的索引可以大大提高數據庫查詢的效率。
優點:大大加快了數據庫檢索的速度,包括對單表查詢、連表查詢、分組查詢、排序查詢。經常是一到兩個數量級的性能提升,且隨著數據數量級增長。
缺點:
分類
1、直接創建索引和間接創建索引
CREATE INDEX mycolumn_index ON mytable (myclumn)
2、普通索引和唯一性索引
CREATEINDEXmycolumn_indexONmytable(myclumn)
CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)
3、單個索引和復合索引
CREATEINDEXname_indexONusername(firstname,lastname),
其中 firstname 為前導列。4、聚簇索引和非聚簇索引 (聚集索引,群集索引)
CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH ALLOW_DUP_ROW
,其中 WITH ALLOW_DUP_ROW
表示允許有重復記錄的聚簇索引CREATEUNCLUSTEREDINDEXmycolumn_cindexONmytable(mycolumn),
索引默認為非聚簇索引使用場景
(>, <, =,>=, <=)
或 order by
、group by
發生時建議使用索引。并且選擇度(一個字段中唯一值的數量 / 總的數量)越大,建索引越有優勢使用規則
create unique index PK_GRADE_CLASS on student (grade, class)
,select * from student where class = 2
未使用到索引,select * from dept where grade = 3
使用到了索引select * from student where tochar(grade)='2
其它通用優化
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。