我有和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是一个坏主意。
答案 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
我希望它有所帮助。