我花了最后一天跟踪我的代码中似乎是内存泄漏的问题,并且相信我最终确定了罪魁祸首 - 报告生成。为了查看问题所在,我创建了一个空的解决方案,只需一个空白表单上的按钮,链接到此事件:
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10000; i++)
{
Microsoft.Reporting.WinForms.ReportViewer temp = new Microsoft.Reporting.WinForms.ReportViewer();
temp.Dispose();
}
}
打开此表单并单击按钮,我看到Windows任务管理器,我可以看到内存开始攀爬,以及USER对象,在几分钟内达到10,000的上限并导致WIN32异常:无法创建句柄。
逐行调试,你可以在创建时看到USER Objects上升了7,然后在Dispose上它只下降了5。
我根据人们遇到的其他问题尝试了temp.LocalReport.ReleaseSandboxAppDomain()
,我还尝试了相同的循环,但在报告查看器周围using
,看看它是否表现不同 - 它没有& #39;吨
我的问题是,是否有任何关于ReportViewer的特殊处理我不知道?
(仅供参考,我正在使用Microsoft.ReportViewer.WinForms版本10开发.NET Framework 4)