C#陷入StringBuilder循环

时间:2018-10-13 17:50:48

标签: c# asp.net-mvc session memory-leaks entity-framework-core

我有一个使用实体框架核心与SQL数据库进行交互的ASP.NET Core MVC Web应用程序。许多页面都使用AJAX进行了部分加载,但是可以直接访问(例如www.example.com/some/actual/page)。

就是发生问题的地方。直接访问页面时,StringBuilder会发生内存泄漏。见下图: StringBuilder memory leak

进一步研究,似乎有一个递归循环陷入其中(这棵树不断,不断,不断……): Recursive Loop

我只在一个位置明确使用了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似乎不是问题的原因。

0 个答案:

没有答案