我相當喜歡開發一個Kivy應用程序。它的目標是android,但也可以在桌面上運行(同時使用不同的皮膚),最終還會有iOs。安卓(kivy)上的Python - 某些操作的速度瓶頸?
我大量使用基本依賴關係: -
扭曲 - 用這個作爲一個IPC,我的應用程序有一個服務器/客戶端的數據操作和UI之間 關係
嗖 - 文本搜索
xmltodict - 輕鬆處理XML
我真的很長時間在Android上的應用程序啓動時間,在一個相對最近的電話,這並不是一個好兆頭。從我粗略計時(基於了time.time()和我的應用程序的初始化時間減去): - 在
我的初始化
我的應用從kivy啓動獲得控制在約1秒自定義類等,在2.4秒標記
在14.4秒標記完成後,我終於完成了我的批量數據加載
的在17號的Econd標誌,我開始使用雙絞線
在22秒大關發送數據到客戶端UI,用戶界面接收數據
有多個點我想,以解決那裏。例如,數據發送的大約5秒差距可以很容易地分解成碎片並在零碎的UI中更新,所以我稍後保留,但我需要詢問數據加載的長達12秒的差距。該數據加載涉及創建有關的自定義類的1000個實例,下面的步驟(累計時間超過1000個實例): - 從1000文本XML文件
讀取數據(0.734秒)
解析在讀取數據的XML(9.198秒)
填充對象的變量基於解析XML(0.585秒)
目錄樹遍歷(使用此定位一定的基本文件夾,0.0824秒)
修改時間測量爲XML文件(0.12秒),
測得定時讓我驚訝,因爲在我的筆記本電腦上運行的相同的代碼的等效定時是0.041 ,0.9,0.062,0.009和0.016)。一切都慢了10倍。
什麼,如果有的話,我能做些什麼呢?用於測試的手機具有3GB的RAM和Snapdragon 801處理器,所以我很擔心在較慢/較舊的型號上使用此應用程序。我最初的想法是,減速是由於SD卡本身比筆記本電腦的硬盤驅動器慢,但事實上,XML解析(非IO相關)花了這麼長時間似乎表明處理問題。
建議/批評歡迎。
你可以存儲的數據比xml更方便嗎?如何泡菜甚至JSON? – Muposat
我已經考慮過了,但我的基礎數據源需要xml,因爲遺留原因。我目前正在思考一個在啓動時使用的緩存(可能是pickled),一旦數據讀取線程發現有所不同,它就會得到更新。這只是推遲了這個問題,雖然...... –
看看你是否可以得到lxml庫,它被編譯並且應該更快。我肯定會把所有我能做的事情都緩存下來,即使這隻會縮短啓動時間。 – Muposat