Страницы

Поиск по вопросам

понедельник, 17 июня 2019 г.

Отследить потерю памяти Winforms

Помогите отследить потерю оперативной памяти. При каждом запуске отчета она увеличивается на 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(); }

Комментариев нет:

Отправить комментарий