У меня есть серьезные проблемы с производительностью в проекте, над которым я работаю. Это стандартный проект веб -приложения - пользователи отправляют запросы в 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
C#/. Net - очень высокое использование процессора при использовании вызовов функций Async/await ⇐ C#
Место общения программистов C#
1753003958
Anonymous
У меня есть серьезные проблемы с производительностью в проекте, над которым я работаю. Это стандартный проект веб -приложения - пользователи отправляют запросы в API, который запускает некоторую форму вычисления в различных обработчиках.
Проблема сейчас в том, что любой запрос будет значительно повысить использование сервера ЦП, независимо от того, какое внутреннее вычисление должна делать соответствующая функция. Например, у нас есть конечная точка для отображения игры из базы данных - пользователь отправляет запрос, содержащий идентификатор, и сервер ответит JSON -объектом. Когда этот запрос обрабатывается, использование процессора переходит с 5% (при приложении просто работает) до 25-30%. Несколько параллельных запросов будут заброшены на сервер, с .NET-CORE с использованием 60-70% процессора. < /p>
Цепочка запросов выглядит как: < /p>
[b] (контроллер) < /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[/b]
I've performed a performance analysis in ANTS. Я не совсем уверен, как представить результаты, поэтому я сфотографировал, как выглядит CallStack.>
Подробнее здесь: [url]https://stackoverflow.com/questions/51769670/c-net-very-high-cpu-usage-when-using-async-await-function-calls[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия