Я пытался выявить некоторые проблемы с производительностью нашего веб-приложения ASP.NET.Это онлайн-приложение, которым пользуются несколько пользователей (10+).Просто краткий обзор: приложение использует комбинацию веб-форм, страниц MVC, веб-сервисов и т. Д. Когда несколько пользователей подключаются к приложению, оно кажется очень медленным.После исследования памяти кажется, что приложение использует ОЧЕНЬ много памяти, и это замедляет работу машины, что указывает на то, что неуправляемые ресурсы не утилизируются.Я установил ANTS, а затем захватил несколько приложений в системе.Оказывается, много памяти используется неуправляемыми ресурсами: http://tinypic.com/r/154ujra/7
Это первый раз, когда я профилирую память.Профилировщик ANTS указывает, что один из моих классов (ПРАВИЛО) имеет большое количество живых экземпляров: http://tinypic.com/r/1264ltu/7 (который, похоже, не освобожден GC)
После детализации в классеlevel 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);
}
............................
}