我在做一个项目需要解析HL7的消息,用了hapi-osgi-base-1.2.jar这个jar包来解析HL7消息,我是在写好的方法放在bat里面调用运行的,并且用了下面的代码进行测试执行的效率,我发现在前面几次循环大概需要100ms解析完成,但是当for循环达到30次的时候,解析就需要1min左右了。
之后我在eclipse里面直接执行相同的代码,发现每次解析都只需要20ms左右,这就有点尴尬了。之前也用bat执行做过很多代码,都很正常,唯一感觉有点区别的,就是这个解析的jar里面有很多的log日志,执行的时候我也感觉是日志刷新导致的程序运行缓慢,但是没法求证,还请大神帮忙分析一下
for(int i=0;i<100;i++){
Message hapiMsg = null;
Parser p = new GenericParser();
try {
TUtil.out("aaaaggdd.txt", Thread.currentThread().getName()+"开始解析消息:"+(new Date().getTime()));
time = new Date().getTime();
hapiMsg = p.parse(str);
TUtil.out("aaaaggdd.txt", Thread.currentThread().getName()+"解析消息:"+str);
TUtil.out("aaaaggdd.txt", Thread.currentThread().getName()+"解析消息完成:"+(new Date().getTime())+" 时长"+(new Date().getTime()-time)+"ms");
} catch (Exception e) {
e.printStackTrace();
}
// new ManageHL7().manageHL7(str);
}
刚刚我试着把dos窗口给隐藏,来执行这段代码,然后运行效果就很好,会不会是dos窗口刷新log日志太多,而消耗太多资源呢,有办法求证这个问题吗
感觉日志不至于造成这么大的影响。从现象来看,达到一定量级就出问题有可能是哪一步你没有清空积累的东西,导致越走越慢。
比如类似于这种代码:
StringBuffer sb=new StringBuffer();
for(int i=0;i<count;i++){
sb.append("count n="+count);
System.out.println(sb.toString);
}
另外可以试试bat中cmd start /c 接你后面的程序,java 线程起来之后把cmd窗口干掉。