我一直在试图找出我们的ASP.NET Web应用程序的一些性能问题。这是一个在线应用程序,由多个用户使用(10+)。只是一个快速的概述:应用程序使用Web表单,MVC页面,Web服务等的组合......当多个用户连接到应用程序,它似乎变得非常慢。在调查了内存之后,似乎应用程序正在使用大量内存,并且正在减慢计算机的速度,这表明未处理的资源未被处理。我安装了ANTS,然后在系统上捕获了几个应用程序。原来很多内存被非托管资源使用:http://tinypic.com/r/154ujra/7ASP.NET WebApp性能问题:如何解决?
这是我第一次分析内存。 ANTS分析器表明我的一个类(RULE)具有大量活动实例:http://tinypic.com/r/1264ltu/7(似乎没有被GC释放)
在钻入级别级别http://tinypic.com/r/2r3v6nq/7后,它显示一个警告类没有从内存中释放,这可能是因为事件处理程序未被注销。既然这个类包含一个事件处理程序实例,那么它可能是那样吗?然后
public class Rule
{
public event EventHandler deleted;
public void Delete()
{
if (baseQuestionnaire.basePortfolio.mode != Mode.Admin)
{
throw new Exception("Rules can only be deleted in Admin mode");
}
else
{
// Delete the rule from the database
if (id != -1)
{
string delete = "DELETE FROM tb" + DataManager.dbPrefix + "_QuestionRule WHERE QuestionRuleId = " + id.ToString();
DataManager.execute(delete);
}
// Raise a deleted event
if (deleted != null)
deleted(this, new EventArgs());
}
}
}
事件被分配在这样的另一个类,但从来未注册
public class Option : IComparable
{
public void AddRule(Rule newRule)
{
newRule.deleted += new EventHandler(newRule_deleted);
allRules.Add(newRule);
}
............................
}
什么是DataManager的?你也可以显示那个代码吗? –
DataManager是一个密封的静态类,包含经常使用的数据库方法和包装器,就像上面的execute方法是cmd.ExecuteNonQuery()的简单包装器一样。 – FaNIX