Круговые зависимости не могут существовать в RelativeLayout, Android?

Почему бы избежать использования сеанса в WebAPI?

Производительность, производительность, производительность!

Существует очень хорошая и часто упущенная причина, почему вы не должны использовать Session в WebAPI вообще.

Способ ASP.NET, когда Session используется, - это сериализовать все запросы, полученные от одного клиента. Теперь я не говорю о сериализации объектов, но выполняю их в полученном порядке и ожидаю завершения каждого из них до запуска следующего. Это необходимо для предотвращения неприятных условий нити / гонки, если два запроса каждый раз пытаются получить доступ к сеансу одновременно.

Параллельные запросы и состояние сеанса

Доступ к Состояние сеанса ASP.NET является исключительным для каждого сеанса, а это означает, что если два разных пользователя выполняют параллельные запросы, доступ к каждому отдельному сеансу предоставляется одновременно. Однако, если два одновременных запроса сделаны для одного и того же сеанса (с использованием того же значения SessionID), первый запрос получает эксклюзивный доступ к информации о сеансе. Второй запрос выполняется только после завершения первого запроса. (Второй сеанс также может получить доступ, если исключительная блокировка информации освобождается, потому что первый запрос превышает тайм-аут блокировки.) Если значение EnableSessionState в директиве @ страницы установлено в ReadOnly, запрос для чтения только для чтения информация сеанса не приводит к исключительной блокировке данных сеанса. Однако запросы на чтение только для данных сеанса могут по-прежнему ждать блокировки, установленной с помощью запроса на чтение и запись для данных сеанса.

blockquote>

. Что это значит для веб-API? Если у вас есть приложение, на котором запущено множество запросов AJAX, тогда только одно может работать одновременно. Если у вас более медленный запрос, он блокирует все остальные от этого клиента до его завершения. В некоторых приложениях это может привести к очень заметной производительности.

Таким образом, вы, вероятно, должны использовать контроллер MVC, если вам абсолютно нужно что-то из сеанса пользователей, и избегайте чрезмерного снижения производительности, предоставляя его для WebApi.

Вы можете легко проверить это самостоятельно, просто поместив Thread.Sleep(5000) в метод WebAPI и включите сеанс. Запустите 5 запросов, и они займут в общей сложности 25 секунд. Без сеанса они занимают всего более 5 секунд.

(Это же рассуждение относится к SignalR).

35
задан Onik 4 December 2018 в 20:24
поделиться