IIS和IIS表示内存泄漏

时间:2011-10-26 16:39:40

标签: c# memory-leaks ado.net sqlconnection

我有和asp.net mvc 3网站。在本地VS Web服务器或IIS上运行它表示没问题。但是当在IIS(IIS 7.5 Windows 2008 R2)上运行它时,内存泄漏似乎就像内存泄漏一样。有什么想法吗?

还有一个更新:app中有这样的代码:

SqlConnection conn = new SqlConnection { //creating connection here };
conn.Open();
SqlCommand command = conn.CreateCommand();

try
{
    var reader = command.ExecuteReader();
    while (reader.Read())
    {
       //read the data
    }
}
finally
{
   conn.Close();
}

也许应该有像reader.Dispose这样的东西?它可能是内存泄漏的原因吗?


更新:由于某种原因,gc.Collect解决了这个问题。但是它并不是因为一直调用gc.collect是一个坏主意。

1 个答案:

答案 0 :(得分:3)

这里最好的做法是使用括号,这是c#的一个很棒的功能。当您使用带括号的“using”关键字时,它会在用完括号范围时自动处理使用过的对象。这是一个例子;

// SqlConnection implements IDisposable, will be disposed after bracket is closed
using(SqlConnection conn = new SqlConnection())
{
      conn.Open();
      // SqlCommand implements IDisposable, will be disposed after bracket is closed
      using(SqlCommand command = conn.CreateCommand())
      {
         // DataReader implements IDisposable, will be disposed after bracket is closed
         using(var reader = command.ExecuteReader())
         {
            while (reader.Read())
            { 
              // read here.
            }
         }
      }
}

这里还有一个微软链接,上面写着“连接在使用块结束时自动关闭”。 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close%28v=VS.85%29.aspx

我希望它有所帮助。