perf: Оптимизировал работу с Modeus API
All checks were successful
Create and publish a Docker image / Publish image (push) Successful in 1m30s
All checks were successful
Create and publish a Docker image / Publish image (push) Successful in 1m30s
Устранил искусственную задержку и принудительный сбор мусора в сервисе сотрудников, повысив его отзывчивость. Перевел HTTP-запросы на использование `JsonContent.Create` и асинхронную десериализацию из потока, что значительно улучшило эффективность обработки JSON.
This commit is contained in:
@@ -36,10 +36,6 @@ public class ModeusEmployeeService(ILogger<ModeusEmployeeService> logger, Modeus
|
||||
_employees = employees;
|
||||
logger.LogInformationHere($"Получено {employees.Count} сотрудников из Modeus.");
|
||||
}
|
||||
|
||||
await Task.Delay(TimeSpan.FromSeconds(5), _cts.Token);
|
||||
GC.Collect();
|
||||
GC.WaitForPendingFinalizers();
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Net.Http.Json;
|
||||
using Microsoft.Net.Http.Headers;
|
||||
using ModeusSchedule.Abstractions;
|
||||
using ModeusSchedule.Abstractions.DTO;
|
||||
@@ -40,8 +40,7 @@ public class ModeusHttpClient
|
||||
{
|
||||
using var request = new HttpRequestMessage(HttpMethod.Post,
|
||||
$"schedule-calendar-v2/api/calendar/events/search?tz={_configuration["TZ"]!}");
|
||||
request.Content = new StringContent(JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions),
|
||||
Encoding.UTF8, "application/json");
|
||||
request.Content = JsonContent.Create(msr, options: GlobalConsts.JsonSerializerOptions);
|
||||
using var response = await _httpClient.SendAsync(request);
|
||||
if (response.StatusCode != System.Net.HttpStatusCode.OK)
|
||||
{
|
||||
@@ -60,11 +59,13 @@ public class ModeusHttpClient
|
||||
{
|
||||
_logger.LogErrorHere($"Неуспешный статус при получении расписания: {response.StatusCode}, eventId: {eventId}");
|
||||
}
|
||||
List<Attendees>? attendees;
|
||||
try
|
||||
{
|
||||
attendees = Attendees.FromJson(await response.Content.ReadAsStringAsync());
|
||||
return attendees;
|
||||
await using var contentStream = await response.Content.ReadAsStreamAsync();
|
||||
var attendees = await JsonSerializer.DeserializeAsync<List<Attendees>>(
|
||||
contentStream,
|
||||
GlobalConsts.JsonSerializerOptions);
|
||||
return attendees ?? [];
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -78,9 +79,7 @@ public class ModeusHttpClient
|
||||
{
|
||||
using var request = new HttpRequestMessage(HttpMethod.Post,
|
||||
$"schedule-calendar-v2/api/people/persons/search");
|
||||
request.Content = new StringContent(
|
||||
JsonSerializer.Serialize(modeusSearchPersonRequest, GlobalConsts.JsonSerializerOptions),
|
||||
Encoding.UTF8, "application/json");
|
||||
request.Content = JsonContent.Create(modeusSearchPersonRequest, options: GlobalConsts.JsonSerializerOptions);
|
||||
var stopwatch = Stopwatch.StartNew();
|
||||
using var response = await _httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
|
||||
var requestMs = stopwatch.ElapsedMilliseconds;
|
||||
@@ -114,9 +113,7 @@ public class ModeusHttpClient
|
||||
public async Task<string?> SearchRoomsAsync(RoomSearchRequest requestDto)
|
||||
{
|
||||
using var request = new HttpRequestMessage(HttpMethod.Post, "schedule-calendar-v2/api/campus/rooms/search");
|
||||
request.Content =
|
||||
new StringContent(JsonSerializer.Serialize(requestDto, GlobalConsts.JsonSerializerOptions),
|
||||
Encoding.UTF8, "application/json");
|
||||
request.Content = JsonContent.Create(requestDto, options: GlobalConsts.JsonSerializerOptions);
|
||||
using var response = await _httpClient.SendAsync(request);
|
||||
if (response.StatusCode != System.Net.HttpStatusCode.OK)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user