2010-09-22 75 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