powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / AspCore течет память при интенсивном парсинге Json-документов
12 сообщений из 37, страница 2 из 2
AspCore течет память при интенсивном парсинге Json-документов
    #40049357
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
такой же скачек есть.

Это скачок при вообще самом первом вызове HTTP GET. То что до него - это просто запущеное приложение до каких бы то ни было запросов.
...
Рейтинг: 0 / 0
AspCore течет память при интенсивном парсинге Json-документов
    #40049363
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
при единичном и первом вызове HTTP GET отъедает около 3 мб в моем примере и скачка нет.
Код: c#
1.
2.
3.
4.
5.
6.
    [HttpGet("")]
        public async Task Get()
        {
            var client = _httpClientFactory.CreateClient("fakeApiClient");
            var req = await client.GetByteArrayAsync("comments");
        }
...
Рейтинг: 0 / 0
AspCore течет память при интенсивном парсинге Json-документов
    #40049364
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
AspCore течет память при интенсивном парсинге Json-документов
    #40049385
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub

Ну и где тут три мегабайта? Я вижу почти 80.
...
Рейтинг: 0 / 0
AspCore течет память при интенсивном парсинге Json-документов
    #40049392
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
перед запросом около 76, после выполнения-80. Я имел ввиду прирост потребления.
...
Рейтинг: 0 / 0
AspCore течет память при интенсивном парсинге Json-документов
    #40049393
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
fkthat,
перед запросом около 76, после выполнения-80. Я имел ввиду прирост потребления.

Ну так конечно - у тебя один запрос выполняется, а у меня 100.
...
Рейтинг: 0 / 0
AspCore течет память при интенсивном парсинге Json-документов
    #40049413
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
fkthat,
такой же скачек есть.
Нашел решение форк можно закрыть.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
    for (int i = 0; i < 1000; i++)
            {
               using var response = await client.GetAsync("comments", HttpCompletionOption.ResponseHeadersRead);
                  using Stream streamToReadFrom = await response.Content.ReadAsStreamAsync();
                    using JsonDocument jDocument = await JsonDocument.ParseAsync(streamToReadFrom);

                    Console.WriteLine($"RequestNumber:{i}");
            }


единственный минус- нельзя использовать для десериализации Utf8JsonReader.

ну так ты засчет HttpCompletionOption.ResponseHeadersRead и убираешь доп аллокацию давно известная история..просто ты начал с истории что объекты по 4мб вот и сходу я и сказал про Loh
...
Рейтинг: 0 / 0
AspCore течет память при интенсивном парсинге Json-документов
    #40049448
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
vb_sub
fkthat,
перед запросом около 76, после выполнения-80. Я имел ввиду прирост потребления.

Ну так конечно - у тебя один запрос выполняется, а у меня 100.

Это в ответ на твое сообщение, что скачек памяти больше чем на 100 мб происходит при отправке первого запроса- как видишь нет.
...
Рейтинг: 0 / 0
AspCore течет память при интенсивном парсинге Json-документов
    #40049449
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu
vb_sub
fkthat,
такой же скачек есть.
Нашел решение форк можно закрыть.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
    for (int i = 0; i < 1000; i++)
            {
               using var response = await client.GetAsync("comments", HttpCompletionOption.ResponseHeadersRead);
                  using Stream streamToReadFrom = await response.Content.ReadAsStreamAsync();
                    using JsonDocument jDocument = await JsonDocument.ParseAsync(streamToReadFrom);

                    Console.WriteLine($"RequestNumber:{i}");
            }


единственный минус- нельзя использовать для десериализации Utf8JsonReader.

ну так ты засчет HttpCompletionOption.ResponseHeadersRead и убираешь доп аллокацию давно известная история..просто ты начал с истории что объекты по 4мб вот и сходу я и сказал про Loh

Я экспериментировал и с малыми объектами запроса, чтобы они сразу в LOH не попадали, однако в действительности происходит как будто аккумулятивный эффект, после определенного значения происходит скачек потребления памяти. В профайлере памяти этот объект назывался HttpContent, который рос в зависимости от количества запросов.
...
Рейтинг: 0 / 0
AspCore течет память при интенсивном парсинге Json-документов
    #40049473
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Вот такой код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
[HttpGet("")]
public async Task Get()
{
    for (var i = 0; i < 100000; i++)
    {
        using var httpClient = _httpClientFactory.CreateClient();
        var bytes = await httpClient.GetByteArrayAsync("photos");
    }
}


Вот такая картинка:

С виду все ровно - мусорщик регулярно вызывается, расход памяти не растет.

Очень странно здесь ты используешь using для HttpClient, а годом раньше говорил, что нельзя так делать fkthat asp.net core 3.1 HttpClient Error while copying content to a stream.
...
Рейтинг: 0 / 0
AspCore течет память при интенсивном парсинге Json-документов
    #40049514
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
что нельзя так делать

Нет, я там имел в виду вовсен не using. Его использовать можно, хоть он ни на что и не влияет. Нельзя на каждый вызов создавать HttpClient (кроме случая, когда для его создания используется HttpClientFactory). Суть там в том, что сам по себе HttpClient мало что делает, а является оберткой поверх HttpClientHandler. Если на каждый вызов создается новый HttpClient (через new), то для него создается и новый HttpClientHandler, что, собственно, и приводит к неприятным последствиям. Если же для создания используется HttpClientFactory, то повторно используются HttpClientHandler из его пула и все нормально. Другой способ, как я выше сказал - это просто создать HttpClient один раз как singleton и использовать везде его, но он как-то смотрится не очень хорошо - с фабрикой все красивее и дает дополнительные возможности (например именованные HttpClient).
...
Рейтинг: 0 / 0
AspCore течет память при интенсивном парсинге Json-документов
    #40049540
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
HttpClient один раз как singleton и использовать везде его, но он как-то смотрится не очень хорошо - с фабрикой все красивее и дает дополнительные возможности (например именованные HttpClient)


Если планируется использовать в multiple threads, то не стоит использовать один экземпляр, хотя основные методы потокобезопасны, нельзя сказать это в отношении любых кастомных хендлеров.

Конечно же только IHttpClientFactory )
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / AspCore течет память при интенсивном парсинге Json-документов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]