Вызов сервисов mutliple в методе. Как это сделать эффективно? - PullRequest
0 голосов
/ 02 марта 2012

У меня есть веб-страница asp .net (MVC), отображающая 10000 продуктов.

Для этого я использую метод.В этом методе мне нужно вызвать внешний веб-сервис 20 раз.Это связано с тем, что веб-служба выдает мне 500 данных за раз, поэтому для получения 10000 данных мне нужно вызвать службу 20 раз.

20 вызовов замедляет загрузку страницы.Теперь мне нужно увеличить производительность.Поскольку веб-сервис является внешним, я не могу вносить в него изменения.

Потоки - это вариант, о котором я подумал.Поскольку я могу использовать номера страниц (служба разбивает на страницы данные), каждый вызов службы практически независим.

Другой вариант - использование параллельного linq.

Следует ли использовать параллельный linq или выбрать многопоточность?

Кто-нибудь, пожалуйста, ведите меня сюда.Или дайте мне знать другой способ достижения этого.

Примечание: эта веб-страница может одновременно использоваться многими пользователями.

У нас есть фильтры на левой стороне страницы. Для этого нам нужновсе 10000 данных для построения фильтра. В противном случае постраничной информации могло бы быть достаточно. и кэширование невозможно из-за огромной перегрузки на сервере.в то время как 400-1000 пользователей могут обращаться к серверу server.web, время отклика составляет 10 секунд, поэтому мы можем обращаться к ним много раз

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

Ответы [ 3 ]

2 голосов
/ 02 марта 2012

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

0 голосов
/ 02 марта 2012

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

Но получение 10000 элементов за каждый запрос - это нечто очень пугающее:)

0 голосов
/ 02 марта 2012

Threads, параллельный linq вам здесь не поможет.

Parallel Linq предназначен для того, чтобы большая часть работы ЦП распределялась по ядрам ЦП. Вам нужно одновременно выполнять 20 веб-запросов. Для этого вам нужно использовать многопоточность.

Возможно, вы захотите использовать встроенную асинхронную возможность HttpWebRequest (см. BeginGetResponse ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...