[英]ASP.Net Application pool memory leak
我在 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
' 而不是 finally 。 通过查看您提供的代码无法发现内存泄漏的任何原因。
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.