Crystal Report 内存泄漏

doyle posted @ 2011年1月24日 23:23 , 3324 阅读
Loading

公司历史遗留项目,遇到内存泄漏

使用.net memory profile检查,它说是ReportDocument类中有EventHandler没有释放导致内存泄漏

用Reflector看ReportDocument里,自己写的事件只有个init啥啥啥的,也没有找到注册其他事件的地方

只知道责任在crystal report.....

 

然后网上不断翻找,不断修正关键字(得知有许多人和我有一样的烦恼),找到如下文章

(针对2003)

http://www.arquitecturadesoftware.org/blogs/hugobatista/archive/2006/02/22/236.aspx

(针对2005)

http://www.arquitecturadesoftware.org/blogs/hugobatista/archive/2006/05/23/328.aspx

应该是有用的

但是,新的问题是,使用OpenSubreport打开的子报表要怎么办...

 

update:

貌似subreport打开的对象不用去担心...

运行后,内存泄漏显然依然存在

使用.net memory profile检查,它说是CrystalDecisions.CrystalReports.Engine.FormatEngine类中有PrintPageEventHandler没有释放...

寻找是注册在哪里的...

 

update 2:

继续跑了18个小时了,内存下来了,稳定在90MB以内,看来是成功了

 

update 3:

以上链接已经都打不开了...

http://scn.sap.com/thread/1979619 这个链接里还能看到原型,但是没有区分2003和2005的注意事项了

以及,这么长久以来,其实还是有觉得内存有泄漏,从90到200大约需要4天时间,每天涨幅在15~25左右

项目升级到.net3.5后,从140m起跳,又做了一些改进后, 每天仍然有<10m的上升