我有一个使用实体框架核心与SQL数据库进行交互的ASP.NET Core MVC Web应用程序。许多页面都使用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
似乎不是问题的原因。