首页 > 代码库 > 关于debug使用及debug性能报告
关于debug使用及debug性能报告
日本客户说debug多了会影响性能,即使开关没有开,但要判断很多次的话性能肯定要低,因此这边还是作了实验。
调用下面这个类中的method( )方法。
分别是调用10000次、100000次、1000000次,10000000次的时间上的差异:
调用10000次:
使用LOG4J,并在每个方法开始和结尾都输出DEBUG信息,但是LOG级别设置为INFO的场合: 用时:266mm
不使用LOG4J的场合:用时109mm
两种方式的时间相差:157mm
调用100000次:
使用LOG4J,并在每个方法开始和结尾都输出DEBUG信息,但是LOG级别设置为INFO的场合: 用时:1250mm
不使用LOG4J的场合:用时1078mm
两种方式的时间相差:172mm
调用1000000次:
使用LOG4J,并在每个方法开始和结尾都输出DEBUG信息,但是LOG级别设置为INFO的场合: 用时:11500mm
不使用LOG4J的场合:用时11031mm
两种方式的时间相差:469mm
调用10000000次:
使用LOG4J,并在每个方法开始和结尾都输出DEBUG信息,但是LOG级别设置为INFO的场合: 用时:127969mm
不使用LOG4J的场合:用时122766mm
两种方式的时间相差:5203mm
===============================================================================
但是在我的机子上,当调用10000000次这个差值都是负的。。就是说完全不用debug的比写了debug的要慢。这样肯定是有问题的。。。。
后来将程序中的Long全部改为int型,得出:
===============================================================================
调用10000次:
使用LOG4J,并在每个方法开始和结尾都输出DEBUG信息,但是LOG级别设置为WARN的场合: 用时:110mm
不使用LOG4J的场合:用时15mm
两种方式的时间相差:95mm
调用100000次:
使用LOG4J,并在每个方法开始和结尾都输出DEBUG信息,但是LOG级别设置为WARN的场合: 用时:234mm
不使用LOG4J的场合:用时125mm
两种方式的时间相差:109mm
调用1000000次:
使用LOG4J,并在每个方法开始和结尾都输出DEBUG信息,但是LOG级别设置为WARN的场合: 用时:1407mm
不使用LOG4J的场合:用时1109mm
两种方式的时间相差:298mm
调用10000000次:
使用LOG4J,并在每个方法开始和结尾都输出DEBUG信息,但是LOG级别设置为WARN的场合: 用时:12972mm
不使用LOG4J的场合:用时10956mm
两种方式的时间相差:2016mm
================================================================
可以看出用基本型还是包装类差别还是很大的
一般来说系统的性能不取决于DEBUG的性能,而是开发人员编程上的很多小细节上。
另外,为什么要使用下面的方式:
if(logger.isDebugEnabled()){
logger.debug("abc" + “cdb” + "efg");
}
如果打印简单的字符串,直接使用debug一般没什么意见:
logger.debug("abc");
但是如果debug的内容使用字符串连接或者运算,那应该使用logger.isDebugEnabled()先判断一下。这个你懂的。
================================================================================================================================
附件测试代码
=================================================================
没有debug的:
public class NoDebugTest
{
public static void method( )
{
count1();
count2();
count3();
count4();
count5();
}
private static Long count1( )
{
Long result = 0L;
for (int i = 0; i < 100; i++)
{
result += i;
}
return result;
}
private static Long count2( )
{
Long result = 0L;
for (int i = 0; i < 100; i++)
{
result += i;
}
return result;
}
private static Long count3( )
{
Long result = 0L;
for (int i = 0; i < 100; i++)
{
result += i;
}
return result;
}
private static Long count4( )
{
Long result = 0L;
for (int i = 0; i < 100; i++)
{
result += i;
}
return result;
}
private static Long count5( )
{
Long result = 0L;
for (int i = 0; i < 100; i++)
{
result += i;
}
return result;
}
}
有debug的:
imp
public class HaveDebugTest
{
private final static Logger log = Logger.getLogger(HaveDebugTest.class);
public static void method( )
{
log.debug("enter method");
count1();
count2();
count3();
count4();
count5();
log.debug("exit method");
}
private static Long count1( )
{
log.debug("enter count");
Long result = 0L;
for (int i = 0; i < 100; i++)
{
result += i;
}
log.debug("exit count");
return result;
}
private static Long count2( )
{
log.debug("enter count");
Long result = 0L;
for (int i = 0; i < 100; i++)
{
result += i;
}
log.debug("exit count");
return result;
}
private static Long count3( )
{
log.debug("enter count");
Long result = 0L;
for (int i = 0; i < 100; i++)
{
result += i;
}
log.debug("exit count");
return result;
}
private static Long count4( )
{
log.debug("enter count");
Long result = 0L;
for (int i = 0; i < 100; i++)
{
result += i;
}
log.debug("exit count");
return result;
}
private static Long count5( )
{
log.debug("enter count");
Long result = 0L;
for (int i = 0; i < 100; i++)
{
result += i;
}
log.debug("exit count");
return result;
}
}