我打算添加一个 DEBUG 标志,并if statement
在每次Log.d
调用之前添加一个
public static final boolean DEBUG = FALSE;
if (DEBUG)
{
Log.d(TAG,"Debug"); //dead code
}
死代码会在编译时被删除,还是if statement
每次都会被调用?
我打算添加一个 DEBUG 标志,并if statement
在每次Log.d
调用之前添加一个
public static final boolean DEBUG = FALSE;
if (DEBUG)
{
Log.d(TAG,"Debug"); //dead code
}
死代码会在编译时被删除,还是if statement
每次都会被调用?
不,它增加了代码的冗长,只需为此目的使用日志库,例如Log4J ...
logger.debug("Here is some DEBUG");
在 Android 中,您可以使用android-logging-log4j ...
它没有被完全删除,但由于 CPU 的分支预测,接下来不会对性能产生影响。
理想情况下,您应该使用记录器的日志记录级别来确定是否应该调用记录器。
注意:无论您是否检查(并且库应该检查),像这样的简单方法调用几乎没有开销(并且库应该检查)您获得性能优势的地方是如果您在日志消息中执行某些操作,例如
LOGGER.debug("The map is " + map);
在这种情况下,只有启用调试时才会显示调试消息,但是每次都会构建字符串消息,这意味着效率更高。
if(LOGGER.isDebugEnabled())
LOGGER.debug("The map is " + map);
您的调试代码将始终被执行(总是 if)。顺便说一句,Android 已经有了这种类型的标志:BuildConfig.DEBUG