ASP.Net应用程序池内存泄漏
本文关键字:内存 泄漏 程序池 应用程序 Net 应用 ASP | 更新日期: 2023-09-27 18:01:00
我在ASP.Net中遇到了"内存泄漏"的问题。我创建了一个空白页面,与数据库建立了连接。当访问页面时,内存会增加,而且不会很快恢复正常!最高峰值内存在1GB之间!,然后我必须回收IIS中的"池"。。。我使用Connection.Close((和Connection方法。Dispose((,但它们似乎确实有效。我搜索了更多soulção找不到的网页。
有什么方法可以解决这个问题而不必回收水池吗?感谢分享知识!!!
这是发生内存泄漏的块:
SqlConnection cn = new SqlConnection("");
SqlCommand cm = new SqlCommand();
SqlDataReader dr = null;
try
{
cn.Open();
cm.Connection = cn;
cm.CommandTimeout = 600;
cm.CommandText = "";
cm.Parameters.Add("operation", SqlDbType.Int).Value = 1;
cm.Parameters.Add("now", SqlDbType.DateTime).Value = DateTime.Now;
dr = cm.ExecuteReader(CommandBehavior.SingleResult);
while (dr.Read())
{
//blah blah blah...
}
dr.Close();
}
catch (Exception ex)
{
}
finally
{
if (dr != null)
dr.Dispose();
cm.Dispose();
cn.Close();
cn.Dispose();
}
您正在处理所有的一次性对象,这很好。在这种情况下,最好使用"using
",而不是最终使用。通过查看您提供的代码,无法发现内存泄漏的任何原因。
using (SqlConnection cn = new SqlConnection(""))
using (SqlCommand cm = new SqlCommand())
{
.....
using (var dr = cm.ExecuteReader(CommandBehavior.SingleResult))
{
while (dr.Read())
{
//blah blah blah...
}
}
}
请记住,垃圾回收不会释放内存在任何实例处理之后立即执行。
它经过优化,只在内存紧张时触发和释放内存。因此,如果您想测试内存泄漏,您应该在读取内存使用情况之前手动执行垃圾回收。
GC.Collect();
GC.WaitForPendingFinalizers();