2013-10-31 45 views
1

從Android的Performance Tips爲嵌套數據結構創建對象,避免性能下降?

對象創建從來沒有免費的。 ...當您在應用程序中分配更多對象時,您將強制定期進行垃圾收集,從而在用戶體驗中產生一些「打嗝」。

我的應用程序會定期收集GPS數據以及一些元數據。對於每一個位置請求,就應該將結果添加到數據對象:對象達到一定規模

再經過
"data": { 
    "timestamp": { 
     "lat": "value", 
     "lng": "value" 
     "meta": "value" 
    } 
    "timestamp": { 
     "lat": "value", 
     "lng": "value" 
     "meta": "value" 
    } 
    ... 
} 

,或者當設備具有更好的連接性,應用程序將流完整的數據對象到我的服務器,清除它,並重新使用空的物體。

雖然重新使用外部物體data會產生更好的性能,並且確實不難完成,但似乎不可能重新使用內部物體。我是否可以重新使用在下一輪GPS數據收集中很有用的內部對象,並讓剩餘的內部對象被垃圾收集?

+0

我猜想一個簡單樣本的收集至少需要幾毫秒。你的結構有幾個字節。所以我們說的可能是每秒1 KB。那幾乎確切的零,忘記它! – maaartinus

回答

5

我可以重複使用在下一輪GPS數據收集中有用的內部對象,並讓剩餘的內部對象被垃圾收集嗎?

是的,可能。但是你是否有任何跡象表明這樣做確實是一個好主意?你多久收集一次這些數據?您之前提到的「週期性」 - 這聽起來不像是您獲得了大量的營業額。

像這樣的微型優化在平滑性能絕對至關重要的應用中非常重要 - 例如手機遊戲 - 但在許多其他應用中,這只是不必要的,並且損害了代碼的可讀性和可維護性。

我建議你在做出任何決定之前衡量你的應用程序的性能。垃圾收集是否真的會傷害你?這種類型是這些問題的來源嗎? (如果它只是GC問題的一小部分,回收這種特殊類型沒有太大意義。)

+0

+1如果你不衡量你的表現,你只是猜測。 –