C#/. Net - очень высокое использование процессора при использовании вызовов функций Async/awaitC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C#/. Net - очень высокое использование процессора при использовании вызовов функций Async/await

Сообщение Anonymous »

У меня есть серьезные проблемы с производительностью в проекте, над которым я работаю. Это стандартный проект веб -приложения - пользователи отправляют запросы в API, который запускает некоторую форму вычисления в различных обработчиках.
Проблема сейчас в том, что любой запрос будет значительно повысить использование сервера ЦП, независимо от того, какое внутреннее вычисление должна делать соответствующая функция. Например, у нас есть конечная точка для отображения игры из базы данных - пользователь отправляет запрос, содержащий идентификатор, и сервер ответит JSON -объектом. Когда этот запрос обрабатывается, использование процессора переходит с 5% (при приложении просто работает) до 25-30%. Несколько параллельных запросов будут заброшены на сервер, с .NET-CORE с использованием 60-70% процессора. < /p>

Цепочка запросов выглядит как: < /p>

(контроллер) < /strong> < /p>

[HttpGet("game/{Id}")]
public async Task GetPerson(string Id)
{
try
{
var response = await _GameService.GetGameAsync(Id);
return Ok(new FilteredResponse(response, 200));
}
< /code>

service < /strong> < /p>

public async Task
GetGameAsync(string gameId, string apiKey)
{
var response = await _ironmanDataHandler.GetGameAsync(gameId);
var filteredGame = _responseFilterHelper.FilterForPlayer(response, apiKey);
return filteredGame;
}
< /code>

обработчик данных < /strong> < /p>

public async Task GetGameAsync(string gameStateId)
{
using (var db = _dbContextFactory.Create())
{
var specifiedGame = await db.GameStateIronMan.FirstOrDefaultAsync(a => a.gameId == gameStateId);
if (specifiedGame == null)
{
throw new ApiException("There is no game with that ID.", 404);
}
var deserializedGame = JsonConvert.DeserializeObject(specifiedGame.GameState);
return deserializedGame;
}
}
< /code>

Я попытался издеваться над всеми возвращаемыми значениями функции и доступа к базе данных, заменив все вычисленные значения Null /New Game () и т. Д., Но это не улучшает производительность. Я потратил много времени с различными инструментами анализа производительности, но нет ни одной функции, которая использует более 0,5-1% процессора.
После большого расследования единственное «вывод», которого я достиг, заключается в том, что он, похоже, имеет какое -то отношение к внутренней функциональности Async /ожидает и то, как мы используем ее в нашем проекте, потому что не имеет значения, что мы делаем в призванных функциях - как только мы называем функцию, производительность получает огромный удар.
I also tried making the functions synchronous just to see if there was something wrong with my system, however performance is massively reduced if i do that (which is good, i suppose).
I really am at a loss here because we aren't really doing anything out of the ordinary and we're still having large issues.

UPDATE

I've performed a performance analysis in ANTS. Я не совсем уверен, как представить результаты, поэтому я сфотографировал, как выглядит CallStack.>

Подробнее здесь: https://stackoverflow.com/questions/517 ... tion-calls
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»