【问题标题】:CookieContainer memory leakCookieContainer 内存泄漏
【发布时间】:2019-04-24 12:08:03
【问题描述】:

在使用静态 HttpClient 定期访问返回 set-cookie 标头的不同 url 的应用程序中,我发现内存泄漏以及 CPU 使用率逐渐增加。这些问题可以通过在 HttpClientHandler 上设置 UseCookies = false 来解决。这导致我调查 CookieContainer,我发现它维护一个域的哈希表 (m_domaintable),并且对于每个域,它维护一个排序的路径列表 (m_list)。因此,即使根据容量和 PerDomainCapacity 正确删除了 cookie,内存和 CPU 使用量也会随着时间的推移而增长,因为这些集合会随着每个新域/路径的命中而增长。下面有一些显示内存泄漏的示例。

第一个例子:为许多不同的域添加一个 cookie

var cookieContainer = new CookieContainer();
for (int i = 0; i < 10000; i++)
{
    cookieContainer.Add(new Cookie("name1", "value1", "/", $"test{i}.com"));
}

第二个例子:为同一个域添加不同路径的cookie

var cookieContainer = new CookieContainer();
for (int i = 0; i < 10000; i++)
{
    cookieContainer.Add(new Cookie("name1", "value1", $"/{i}", "test.com"));
}

在我使用 HttpClient/HttpClientHandler/CookieContainer 的过程中,这里有什么遗漏吗?文档指出 HttpClient 应该在应用程序的整个生命周期中重复使用,但这意味着 CookieContainer 也将被重复使用,并且这些集合将继续增长。

【问题讨论】:

    标签: c# .net dotnet-httpclient system.net cookiecontainer


    【解决方案1】:

    存在导致此问题的 CookieContainer 错误:https://github.com/dotnet/corefx/issues/33712

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 2013-01-20
      • 2011-10-31
      • 2019-08-10
      • 2013-06-24
      • 2011-03-22
      • 2015-04-20
      相关资源
      最近更新 更多