У меня есть веб-приложение ASP.NET Core MVC, использующее ядро Entity Framework для взаимодействия с базой данных SQL.Многие страницы частично загружаются с использованием AJAX, но возможны прямые посещения (например, www.example.com/some/actual/page
).
Именно здесь возникает проблема.Когда страница посещается напрямую, происходит утечка памяти с StringBuilder
.См. Рисунок ниже:
Дальнейшее расследование, похоже, что есть какой-то рекурсивный цикл, в котором он застревает (Это дерево продолжается, и включается, и включается, и включается...):
Я только явно использую StringBuilder
в одном месте, которое, как я уже определил, не связано с проблемой.Однако, насколько я понимаю, JsonConvert
использует базовый StringBuilder
.Я использую JsonConvert
в основном для преобразования переменной сеанса обратно в объекты, и наоборот.Вот пример:
public Cycle SelectedCycle
{
get
{
if (string.IsNullOrEmpty(_httpContextAccessor.HttpContext.Session.GetString(_selectedCycle)))
return null;
return JsonConvert.DeserializeObject<Cycle>(_httpContextAccessor.HttpContext.Session.GetString(_selectedCycle));
}
set
{
var serializedCycle = JsonConvert.SerializeObject(value, Formatting.None, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
_httpContextAccessor.HttpContext.Session.SetString(_selectedCycle, serializedCycle);
}
}
Я хочу сказать, что ReferenceLoopHandling = ReferenceLoopHandling.Ignore
может быть причиной проблемы, но я не смог подтвердить это.Что может быть причиной этой проблемы и как я могу ее исправить?
Обновление 1:
ReferenceLoopHandling.Ignore
, похоже, не является причиной проблемы.