【发布时间】:2015-02-02 16:15:59
【问题描述】:
我正在使用 Visual Studio 2013 创建一个具有一些报表生成功能的 WPF 桌面应用程序,我有大约 30 个报表,用户可以从一个报表切换到另一个报表。我的问题是每次我更改ReportEmbeddedResource 然后调用RefreshReport() 方法时,内存都会增加,所以如果用户浏览所有30 个报告,我的应用程序将消耗大约130 Mb!我知道我必须在每次导航后释放资源,我用谷歌搜索但没有找到答案;这是我的代码
public MainWindow() // constructor
{
InitializeComponent();
this.reportViewer.ZoomMode = Microsoft.Reporting.WinForms.ZoomMode.PageWidth;
InitDataSources();
}
private void InitDataSources()
{
//manager data source
mangerDataSource = new ReportDataSource();
mangerDataSource.Name = "ManagerDataSet";
mangerDataSource.Value = uow.Members.GetAll().
ToList().Where((s) => s.MemberType == MemmberTypes.Manager);
reportViewer.LocalReport.DataSources.Add(mangerDataSource);
//adding 2 other data sources
}
public void RenderReport(string reportKey)
{
reportViewer.Reset();
string path = "Manager";
if (reportKey.Contains("tea")) path = "Teacher";
if (reportKey.Contains("stu")) path = "Student";
reportViewer.LocalReport.ReportEmbeddedResource = string.Format(
"Printers.Reports.{0}.{1}.rdlc", path,reportKey);
reportViewer.RefreshReport();
}
渲染新报表后有没有办法释放旧报表资源?
【问题讨论】:
-
你找到答案了吗?
-
不,我没有,我记得我曾经读到微软在他们的错误数据库中有这个错误,但它计划在未来修复,因为它目前不是他们的首要任务!我没有我所说的链接。
标签: c# wpf memory-leaks reportviewer