Оптимизация долгосрочного метода WebAPI

У меня есть функция WebAPI, которая выполняет вычисление цикла, чтобы найти одно числовое значение.

Из моего клиентского JavaScript я делаю около 20 одновременных запросов к этой функции для загрузки одной страницы. С помощью инструмента Chrome для повышения производительности сети я подтвердил, что все запросы выполняются одновременно, но запросы получают ответы последовательно (первоначальные занимают 0,2 секунды, а последующие - до 8), поэтому сервер является узким местом.,

Я попытался оптимизировать свой код, сделав его асинхронным, хотя я не уверен, что сделал это правильно или что он вообще улучшил производительность.

[HttpGet]
public async Task<double> CalcResult(double First, double Second)
{
    var result = await Task.Run(()=>LoopCalculationFunction(First,Second));
    return result * 100;
}

Правильно ли это сделано и можно ли как-нибудь оптимизировать эту функцию?

1 ответ

Решение

Вы должны изменить свой javascript на стороне клиента для пакетных вызовов, в идеале в один запрос. Передать массив first а также second значения и получить массив обратно.

1) Каждый круговой обход медленный, вы можете сделать это быстрее за один раз.

2) Вы достигнете лимитов для каждого сервера (или для профиля) браузера для одновременных подключений.

3) Это неуместное использование Task.Runсм. http://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-dont-use.html

4) Если ваше общее время соединения слишком велико, вы должны перейти к API-интерфейсу опроса: опубликуйте запрос на вычисление, а затем запросите прогресс и возможный результат.

Другие вопросы по тегам