Значение bool IsReusable в интерфейсе обработчика http

StackOverflow https://stackoverflow.com/questions/539302

Вопрос

При написании обработчика/модуля http необходимо реализовать член интерфейса, называемый - bool IsReusable.

Каково значение этого члена?Если я установлю значение false (или true), что это будет означать для остальной части веб-приложения?

Это было полезно?

Решение

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

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

Приложение создаст столько обработчиков, сколько необходимо для обработки текущей нагрузки.

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

Еще одно предостережение: вам необходимо быть уверенным, что в конце выполнения ProcessRequest состояние объекта такое, как вы хотели бы, чтобы другой запрос повторно использовал объект.

Другие советы

В дополнение к ответу AnthonyWJones, если ваш обработчик HTTP возвращает true для IsReusable тогда вы должны убедиться, что он полностью потокобезопасен.

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

Если вы не сохраняете какое-либо состояние в этом экземпляре (т.е.:у вас нет никаких полей (так называемых «переменных класса»)), тогда вы можете безопасно использовать их повторно.

На всякий случай это по умолчанию неверно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top