背景:
有个项目在系统后台用Jacob调用Word进程的API做doc文件处理。在进行压力测试的时候,发现运行一段时间后,内存占用奇高,大约7.4G。由于JVM占用内存限制为2G,因此怀疑多出来的内存应当是Jacob泄露的。
在网路上搜索解决办法,都是要这样调用
ComThread.InitSTA();
// do something
ComThread.Release();
但是在项目中,使用了线程池进行DOC文件处理,也就是同一时间,会有多个WORD进程在跑,使用ComThread.InitSTA();之后,Jacob仅允许线程池里面的一个线程执行,其他线程都被锁住。
最后修改成ComThread.InitMTA(true);来初始化,经过24小时压力测试,可以同时有多个WORD进程运行,另外也解决了Jacob内存溢出问题。