用友股份-LE服务支持部技术方案--《一般报销单提交慢解决案例》建立日期:2013-04-01修改日期:xxxx-xx-xx文档属性:客户文控编号:LE-DY-JS-2013-00452/8文档控制创建记录审阅人姓名所属部门职位审阅签字发布人姓名所属部门发布时间日期作者所属部门邮件地址版本2013-04-01魏享林V1.03目录一般报销单提交慢解决案例...............................................................................................4一.系统环境..................................................................................................................4二.问题描述................................................................................................................4三.检查分析................................................................................................................4四.解决方法................................................................................................................84一般报销单提交慢解决案例一.系统环境NC版本:NC57:二.问题描述报销管理下定义了一个一般报销单,此报销单有30几个子流程,导致了客户提交单据速度非常慢,需要接近20s。三.检查分析1.用NMC监控后台,发现一个Web线程运行时间很长,SQL执行的时间很短,大都在10ms以内,时间主要用在代码运行上。5从线程堆栈可以看到,工作流引擎在做公式计算时,要初始化Interpreter,而初始化Interpreter又涉及到大量的类加载。2.问题出在配置的报销子流程过多,导致代码走工作流的次数很多,同顾问商量能否减少子流程,得到否定答复。3.要想提高速度,只能从优化代码着手,用JProfile做代码耗时的分析,发现时间主要消耗在Interpreter类的初始化上,该类初始化共用近90%的时间。64.查看ns.bs.wfengine.script.ExpressExcutor类的实现,发现程序中,每次要使用Interpreter时,都会去重新创建一个Interpreter5.修改代码,做一个Interpreter的简单对象池,每次使用时,从池中获取,避免每次去生成Interpreter。786.补丁打到用户环境后,时间由原来近20秒,提高到2-3秒左右。四.解决方法修改代码,避免Interpreter类的反复生成,提供补丁。