Asp.net w3wp.exe是否会增加并导致内存不足?
我正在使用Crystal Viewer在asp.net中显示报告。我注意到,每次查看报告时,w3wp的内存使用量都会增加,并且在生成报告后不会下降。如果我继续运行相同的报告,内存将继续增加。这似乎不对。我做错什么了吗?这是我的代码:Asp.net w3wp.exe是否会增加并导致内存不足?,asp.net,sql-server,crystal-reports,Asp.net,Sql Server,Crystal Reports,我正在使用Crystal Viewer在asp.net中显示报告。我注意到,每次查看报告时,w3wp的内存使用量都会增加,并且在生成报告后不会下降。如果我继续运行相同的报告,内存将继续增加。这似乎不对。我做错什么了吗?这是我的代码: protected void BtnOuvrirRapport(object sender, EventArgs e) { ReportDocument rptdoc = new ReportDocument();
protected void BtnOuvrirRapport(object sender, EventArgs e)
{
ReportDocument rptdoc = new ReportDocument();
examenTableAdapter adapter = new examenTableAdapter();
DataTable dt = adapter.GetData();
rptdoc.Load(Server.MapPath("NB_EXAMNE_Report.rpt"));
rptdoc.SetDataSource(dt);
rptdoc.RecordSelectionFormula = "{examen.study_rv_date} in {?fromdate} to {?todate}";
Session["rd"] = rptdoc;
rptdoc.Refresh();
}
protected void Page_Load(object sender, EventArgs e)
{
Response.AppendHeader("Refresh", "900");
ReportDocument rd = (ReportDocument)Session["rd"];
CrystalReportViewer1.ReportSource = rd;
CrystalReportViewer1.DataBind();
CrystalReportViewer1.RefreshReport();
CrystalReportViewer1.ReuseParameterValuesOnRefresh = true;
GC.Collect();
}
w3wp将是IIS端
对于IIS,应用程序池。你可以做必要的调整
达到最大虚拟内存时或在几分钟内回收。
recycle将创建一个新的w3wp进程来处理新的web请求,而旧的w3wp进程一旦完成就会终止它
请注意:
手动回收应用程序池将销毁所有会话。这意味着所有会话都将变为空。
不要担心w3wp。垃圾收集器有时会减少使用量。感谢Oliver的回答,我试图从IIS手动回收,但收到消息“无数据源”。@gilas,1,检查w3wp内存消耗是否是服务器的主要问题?它是否会影响服务器性能?如果没有,那么您最好坚持IIS应用程序池的默认设置。在显示一些报告后,当我在池应用程序中设置虚拟内存值时,我得到一个错误nodata@gilas,不确定您在应用程序池中设置了什么类型的值。当它循环使用时,它将擦除所有会话。对代码进行一些修改,可能不需要将整个报告rptdoc保存到会话中。会话中存储的内容/大型数据越多,ur w3wp的内存就会越高。会话默认值为20分钟,因此20分钟后使用的内存将被重新使用或删除。我使用会话是因为crystal report与按钮不在同一页中…: