2016-12-04 55 views
2

我有一個應用程序一直運行在後臺服務(只有當屏幕上),並定期(1-10分鐘)記錄一個如何間隔時間長以及間隔是好還是不好。在每天結束時,我將這些計數的好壞間隔記錄到一個csv文件中。基於SQLite數據庫與基於文件的數據存儲從電池性能影響的角度

For visual people like me: 
      <--------------------------THE DAY ---------------------> 
minutes: 2m 1m 5m  3m 3m 3m 3m 1m 2m 1m 1m 
      |----|---|-------|-----|-----|-----|-----|--|----|---|---| 
       rec rec rec rec rec rec rec rec rec rec rec 
     Record              

目前我使用SharedPreferences存儲全天好/壞計數,並把它寫在一天的末尾的文件,但我越來越擔心SharedPrefs數據的持久性(I」我有一些它被我認爲是操作系統清除我的應用程序緩存隨機擦除的情況下)

我試圖決定在文件中記錄這些臨時計數與完全遷移到SQLite數據庫結構並持續調用一整天的寫作和閱讀。

從電池性能的角度來看,這對於每天進行多次寫作和閱讀電話(約500-5000次操作)來說成本最低,爲什麼?

+0

*全部*存儲在某種文件中。擦除應用程序的* data *將擦除設置,數據庫和所有其他文件,除非您已將它們存儲在外部存儲上,並且可以更輕鬆地擦除它們。 –

回答

1

SQLite數據庫==基於文件的數據存儲

SQLite數據庫僅僅是存儲在磁盤上只有文件,性能差異將是最小的,SQLite數據庫做的唯一事情更多的是執行多一點指示CPU最終獲取寫入的數據。

爲什麼我不會選擇SQLite數據庫的唯一原因是因爲在設置方面可能有點矯枉過正,因爲你只寫數字。你可以做的是自己寫一個文件到存儲/ SD卡,並不斷將數字附加到以換行符或其他CSV格式分隔的文件中。

+0

好點,但是您不認爲來自SQL方面的附加層抽象會對性能產生影響,因爲您訪問的方式是完全不同的。 (即結構化查詢和二進制讀取與ASCII文件和基於文本的讀數?) – Rob

+0

這些之間的性能差異很小,電池消耗將會相當。你應該去SQLite。 – Houssni

+0

有趣的是,如果你不介意的話,我希望在接受之前看看其他人是否有額外的推理或支持你的回答:) – Rob

0

貌似基於文件的方法會比SQLite的更好,但它取決於你是如何處理上一個數據庫文件的文件

  1. 的SQLite本身存儲數據。它會自己擁有db 管理成本但是非常小巧

  2. 每次應用程序插入或提取數據時,都必須打開db,這個 本身就是一個代價。如果應用程序保持其開放的,這也是昂貴的

  3. 將有直接比平方更新文件精簡版

從所有這些事實

除了少Android的API層,測試這樣的場景不應該是一個問題。我會寫測試用例這樣

  1. 具有恆定的電池水平,即100%充滿電

  2. 繼續運行一些電池密集的活動,即播放視頻,下載,運行程序,它運行連續寫入到文件(當前日期時間秒)

  3. 減少常規時間間隔爲10秒(1-10分鐘),文件中的每個

  4. 更新數據5分鐘

  5. 檢查2小時

重複測試之後,但在第3點更新分貝,而不是文件的電池電平

可能會有雙重工作,因爲你將不得不用兩種方法來實現,但我相信db中的更新不會有太多的編碼工作

很少有人可能不喜歡10秒間隔,因爲在這裏不會發生重大變化持續時間,但這裏的目標是儘可能多地進行迭代,在文件或數據庫中更新它們並獲取電池電量比較的統計數據。

相關問題