日期:2014-05-20  浏览次数:20880 次

VS2005水晶报表内存不释放的问题,高手、不服的进
我用VS2005里的VB进行WINDOWS程序开发,其中使用了水晶报表,现遇一个关于内存没有释放的问题,望指点
在我窗体上有2个CrystalReportViewer控件,展示2个报表,因为用户要时常的给程序数据,显示其报表,发现程序运行1小时以后开始死机,经查是下面这块程序的问题,使用内存不断的增加不能释放,请达人指点。
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
  getDataForChart(dt, dtTerm, "MCD", CrystalReportViewer1)
  getDataForChart(dt, dtTerm, "WLD", CrystalReportViewer2)
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
  Private Sub getDataForChart(ByVal dt As DataTable, ByVal dtTerm As DataTable, ByVal sExKind As String, ByVal cv As CrystalReportViewer)

  Dim ds As DataSet = New dsRYFullChipsDateForChart
  Dim dtChart As DataTable = ds.Tables("RYFullChipsDataForChart")
'中间无用代码略。。。。。。。。。。

  Dim cr As crRYFullChips = New crRYFullChips '我的报表
  cr.SetDataSource(dtChart)
  cr.DataDefinition.FormulaFields("bbb").Text = """" & drMCDAMT(0)(2).ToString() & """"
  cr.DataDefinition.FormulaFields("KIND").Text = """" & sExKind & """"
  cv.ReportSource = cr

  ds.Dispose()'这个写不写一样
  dtChart.Dispose()'这个写不写一样
。。。。。。。。
  End Sub
经反复试验发现只要反复运行上面SUB过程内存就会不断的增加,除非将整个程序关闭。否则程序只要一运行上面的程序,内存就占用一些,长时间大量运行后会吃光内存造成死机。。。。。将cr,cv等至为NOTHING也不行,用Dispose则报表被消毁不能显示,试验做了很但都不好用,还试什么GL.XXXX,就是清理内存的代码都不好用。谁知道为什么?

------解决方案--------------------
public partial class Form1 : Form
{
private ReportDocument employeeReport1; 
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
employeeReport1 = new ReportDocument();
employeeReport1.Load("../../EmployeeReport.rpt");
crystalReportViewer1.ReportSource = employeeReport1;
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
employeeReport1.Dispose();
}
}