2015-04-08 2 views
1

Итак, лучше ли мне делать несколько запросов к одному контроллеру WebAPI2 или делать столько запросов на многие контроллеры. т. е. один контроллер, обрабатывающий 10 запросов, выполняет хуже, чем 10 контроллеров, обрабатывающих по одному запросу каждый?Производительность WEBAPI2 для многих против одного контроллера

В любом случае вы могли бы объяснить, почему и как лучше, чем другое, а также то, как обработка запросов отличается от двух.

+0

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

+0

Когда вы говорите, что 10 контроллеров обрабатывают по одному запросу каждый, вы говорите о структуре (т. Е. 10 методах запроса на одном контроллере) или активации (т. Е. Singleton vs. per request resources)? –

+0

Если бы я сказал, что один контроллер, который позволил мне получить 10 разных сущностей (я знаю, плохой дизайн, как пример), я делаю один запрос для каждого vs, помещая каждый запрос на получение в другой контроллер, по одному для каждого объекта. – Dhunt

ответ

3

Точно 0 разница.

Если вы явно не изменяете поведение по умолчанию, для каждого запроса создается новый экземпляр контроллера. Таким образом, независимо от того, создаете ли вы 10 экземпляров контроллера A или 10 экземпляров контроллера B, нет никакой разницы: вы получаете 10 экземпляров в любом случае.

Нельзя сказать, что если контроллер A дороже контроллера B, это, очевидно, будет иметь эффект.

0

Один звонок лучше.

На самом деле есть несколько факторов, которые включают это. главное в этом: в любой заданной системе эффективность системы является самой медленной составляющей. В большинстве случаев с многоуровневой архитектурой, если вы не делаете что-то невероятно сложное в своих расчетах, самая медленная часть - это передача информации между уровнями. Таким образом, с несколькими передачами по уровням говорят, что у вас есть процесс a, который занимает 10 мс для завершения и обработки b, который занимает 25 мс для завершения, но ваша передача занимает 100 мс, чтобы идти в обоих направлениях, если вы выполняете однопоточный вызов, вы будете ожидая 135 мс для вызова, который выполняет оба варианта, против 235 для нескольких вызовов.

Но подождите, если вы спросите, что произойдет, если оба вызова находятся в разных потоках. Хорошо, теперь это вопрос системных ресурсов, уверен, что ваши постоянные потоки сделают это быстрее до точки. Вы по-прежнему говорите в лучшем случае об уменьшении скорости 10 мс в описанном выше сценарии, почти тривиально, когда речь идет о большой полной шкале передачи. Но то, что происходит, когда ваши вызовы превышают число постоянных потоков, поскольку вызовы api являются апатридами, каждый вызов обрабатывается в его собственном потоке. Итак, теперь вы должны заплатить штраф, чтобы развернуть поток, что очень сложная операция.

Существует сценарий, что вы можете выполнять несколько вызовов api для одной и той же операции, но я бы рекомендовал использовать их только для вещей, не зависящих друг от друга, например, процесс отладки завершен и возвращается полностью независимым от процесса b

+1

Я думаю, что вы неверно истолковали вопрос: ОП спрашивает, существует ли разница между 1 контроллером, обрабатывающим 10 отдельных запросов или 10 контроллеров, каждый из которых обрабатывает один запрос. Речь идет не о группировании запросов в один звонок. –

Смежные вопросы