Помогите отследить потерю оперативной памяти. При каждом запуске отчета она увеличивается на 2-3 мб.
Вот как запускаю отчет
private void callLoading()
{
loadingList f7 = new loadingList();
f7.ShowDialog();
}
Код формы в которой открывается отчет
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Reporting.WinForms;
using System.Data.SqlClient;
using System.IO;
namespace MSU
{
public partial class loadingList : Form
{
SqlConnection cn = new SqlConnection(@"строка подключения");
DandDDataSet r = new DandDDataSet();
public loadingList()
{
InitializeComponent();
}
private void loadingList_Load(object sender, EventArgs e)
{
cn.Open();
SqlDataAdapter da = new SqlDataAdapter("тут запрос", cn);
da.Fill(r, r.Tables[0].TableName);
ReportDataSource mds = new ReportDataSource("DataSet1", r.Tables[0]);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(mds);
this.reportViewer1.LocalReport.Refresh();
this.reportViewer1.RefreshReport();
}
private void loadingList_FormClosing(object sender, FormClosingEventArgs e)
{
main m = this.Owner as main;
m.dis();
GC.SuppressFinalize(this);
this.Dispose(true);
}
}
}
Ответ
Победил пожирание оперативной памяти вот так :
using (SqlConnection cn = new SqlConnection(@"строка"))
{
cn.Open();
using (SqlCommand cmd = new SqlCommand())
{
using (DandDDataSet m = new DandDDataSet())
{
using (SqlDataAdapter da = new SqlDataAdapter("тут запрос", cn))
{
da.Fill(r, r.Tables[0].TableName);
ReportDataSource mds = new ReportDataSource("DataSet1",r.Tables[0]);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(mds);
this.reportViewer1.LocalReport.Refresh();
this.reportViewer1.RefreshReport();
}
}
}
}
Мне писали что не нужен метод при закрытии формы, но как раз он и подчищает
private void loadingList_FormClosing(object sender, FormClosingEventArgs e)
{
this.reportViewer1.Reset();
this.reportViewer1.Dispose();
GC.SuppressFinalize(reportViewer1);
GC.Collect();
}
Комментариев нет:
Отправить комментарий