2010-09-22 89 views
18

我不完全確定我正在閱讀的文檔中。可以留下一堆散佈的log.d代碼段,或者我應該註釋掉它們,以免它們影響我的應用程序的性能。Log.d和對性能的影響

感謝,

我有點困惑,因爲如果你閱讀有關日誌對象(documentation)你看到這一點:

「的順序在冗長的條款,從最少到最多的是ERROR,WARN, INFO,DEBUG,冗長。放牧,不應該被編譯成不同的發展過程中 應用程序。調試日誌編譯但 在運行時錯誤,警告和信息日誌中刪除始終保持。「

它幾乎聽起來像是可以將調試消息留在那裏,因爲它們被「剝離」。無論如何,感謝你的回答,我會在完成時發表評論。不像我一旦完成應用程序就需要它們。

謝謝

+1

除了影響應用程序的性能之外,它們可能會讓其他人更難調試它們的東西。日誌只有64KB,因此每次添加日誌消息時都會將其他消息推到頂部。 – fadden 2010-09-22 20:35:02

回答

14

日誌會影響性能,所以建議您註釋它或記錄條件語句。

例如

​​

然後,當你發佈你的發行版只是改變 「d」 假

+3

爲什麼不設置debuggable = false來禁用應用程序的調試: anticafe 2011-04-14 00:43:35

+11

@ anticafe因爲如果您在Log語句中進行連接,它仍然會運行(導致不必要的分配)。設置'debuggable = false'只能確保它不會在日誌中結束。這些方法仍然會被調用。 – yydl 2011-12-25 07:40:34

+0

更好的是,使用Proguard去除代碼中的所有日誌。 – 2013-08-12 18:30:13

3

肯定地評論他們。它們加起來很快,可能會明顯減慢你的應用程序,特別是如果你有它們的循環。

8

我的解決方案:

+0

迄今爲止最好的解決方案恕我直言 - 不污染代碼在所有:) – manmal 2012-03-27 11:23:11

+0

但你不能再打開它們 – likejiujitsu 2017-10-17 15:37:26

2

只需使用代碼保護方法。

if (Log.isLoggable(LOG_TAG, Log.DEBUG)) { 
Log.d(LOG_TAG, "Your log here"); 
} 
+0

即使這個檢查有性能影響。我只是運行Traceview和Log.isLoggable()需要5ms的CPU時間/電話和差不多11ms的實時/呼叫。 – 2017-06-11 23:36:24

+0

你說得對。但比寫日誌信息要好得多。該級別可以通過服務器的配置進行配置。 – gconcon 2017-06-21 15:10:58

+0

這絕對比寫入磁盤要好,但如果您試圖以60fps的速度持續渲染幀,那就不太好。它在每幀16.7毫秒中佔用了很多塊。 – 2017-06-21 17:55:39