RDLC渲染System.OutOfMemoryException

时间:2017-11-08 11:05:16

标签: c# export-to-excel rdlc reportviewer

我正在尝试使用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;

0 个答案:

没有答案