Я наблюдаю небольшую утечку памяти в сочетании с постепенным увеличением использования ЦП со временем в приложении, которое использует статический HttpClient для регулярного обращения к различным URL-адресам, которые возвращают заголовки set-cookie.Эти проблемы решаются путем установки UseCookies = false на HttpClientHandler.Это привело меня к исследованию CookieContainer, и я обнаружил, что он поддерживает хеш-таблицу (m_domaintable) доменов и для каждого домена он поддерживает отсортированный список путей (m_list).Таким образом, даже несмотря на то, что файлы cookie удаляются корректно на основе Capacity и PerDomainCapacity, использование памяти и процессоров со временем увеличивается, так как эти коллекции растут с каждым новым попаданием в домен / путь.Ниже приведены некоторые примеры, показывающие утечку памяти.
Первый пример: добавление файла 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 также будет использоваться повторно, и эти коллекции будут продолжать расти.