Я использую Visual Studio 2013 для создания рабочего стола WPF, у которого есть некоторые функции генерации отчетов, у меня около 30 отчетов, и пользователь может перейти от отчета к другому. Моя проблема в том, что каждый раз, когда я меняю ReportEmbeddedResource
, а затем вызываю методы RefreshReport()
, память увеличивается, поэтому, если пользователь просматривает все 30 отчетов, мое приложение будет потреблять около 130 Мб! Я знаю, что я должен выпустить Ресурсы после каждой навигации, я искал ее, но не нашел ответа; Вот мой кодКак избежать утечки памяти ReportViewer при навигации по многим отчетам?
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();
}
Есть ли способ опубликовать старый ресурс отчета после рендеринга нового отчета?
Вы нашли ответ? – Julian50
Nop Я этого не сделал, я помню, что однажды я прочитал, что у Microsoft есть эта ошибка в базе данных об ошибках, но в будущем она будет исправлена, поскольку в настоящее время это не их верхний приоритет! У меня нет ссылки на то, что я сказал. –