ASP.Net中存在“内存泄漏”问题。 我创建了一个与数据库建立连接的空白页面。 访问页面时内存会增加,并且不会立即恢复正常!最高峰值内存介于1GB!之后,我必须回收IIS中的“池”... 我使用Connection.Close()和connection.Dispose()方法,但似乎它们确实有效。 我在网上搜索的更多灵魂无法找到。
有没有办法解决这个问题,而无需回收池? 感谢分享知识!!!
这是发生内存泄漏的块:
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();
}
答案 0 :(得分:0)
您正在处理好的所有一次性物品。最好使用' 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();