我正在尝试使用RDLC渲染自动导出我生成的报告。下面的代码是在一个计时器内,计时器将检查数据库上是否有请求,它将从数据库中只获得1个请求的报告。 我多次重复这个过程(我认为错误发生前是10次。)但是发生了内部异常System.OutOfMemoryException的LocalProcessingException(参见下面的代码)。我使用GC.Collect但它没有帮助。
try
{
using (ReportViewer ReportViewerControl = new ReportViewer())
{
ReportViewerControl.LocalReport.ReportPath = "myrdlcpath";
ReportViewerControl.LocalReport.DataSources.Clear();
ReportViewerControl.LocalReport.DataSources.Add(ReportSource);
ReportViewerControl.LocalReport.DisplayName = "mydisplayname";
ReportViewerControl.LocalReport.SetParameters(MyReportParameters);
ReportViewerControl.LocalReport.Refresh();
File.WriteAllBytes(
"MyreportFileName.xlsx",
ReportViewerControl.LocalReport.Render( //LocalProcessingException here having inner exception System.OutOfMemoryException
"EXCELOPENXML",
null,
out mimeType,
out encoding,
out extension,
out streamids,
out warnings));
ReportViewerControl.LocalReport.DataSources.Clear();
ReportViewerControl.Clear();
}
}
catch(LocalProcessingException ex)
{
GC.Collect();
using (ReportViewer ReportViewerControl = new ReportViewer())
{
ReportViewerControl.LocalReport.ReportPath = "myrdlcpath";
ReportViewerControl.LocalReport.DataSources.Clear();
ReportViewerControl.LocalReport.DataSources.Add(ReportSource);
ReportViewerControl.LocalReport.DisplayName = "mydisplayname";
ReportViewerControl.LocalReport.SetParameters(MyReportParameters);
ReportViewerControl.LocalReport.Refresh();
File.WriteAllBytes(
"MyreportFileName.xlsx",
ReportViewerControl.LocalReport.Render(
"EXCELOPENXML",
null,
out mimeType,
out encoding,
out extension,
out streamids,
out warnings));
ReportViewerControl.LocalReport.DataSources.Clear();
ReportViewerControl.Clear();
}
}
ReportSource.Value = null;