Значение bool IsReusable в интерфейсе обработчика http
При написании обработчика / модуля http существует интерфейсный элемент для реализации с именем - bool IsReusable.
Каково значение этого члена? Если я установил значение false (или true), что это значит для остальной части веб-приложения?
3 ответа
Обычной точкой входа для обработчика является метод ProcessRequest. Однако у вас может быть код в конструкторе класса, который собирает некоторые значения экземпляров, которые являются дорогостоящими для построения.
Если вы задаете Reusable, чтобы быть истинным, приложение может кэшировать экземпляр и повторно использовать его в другом запросе, просто вызывая его метод ProcessRequest снова и снова, без необходимости каждый раз восстанавливать его.
Приложение будет создавать столько обработчиков, сколько необходимо для обработки текущей нагрузки.
Недостатком является то, что если необходимое количество экземпляров больше, чем имеющиеся в настоящее время экземпляры, это приводит к увеличению объема используемой памяти. И наоборот, они также могут уменьшить видимое использование памяти, поскольку их значение экземпляра выдержит циклы GC и не требует частого перераспределения.
Еще одно предостережение: вы должны быть уверены, что в конце выполнения ProcessRequest состояние объекта будет таким, каким вы хотели бы, чтобы другой запрос повторно использовал объект.
В дополнение к ответу AnthonyWJones, если ваш обработчик HTTP возвращает true
за IsReusable
тогда вы должны убедиться, что он полностью потокобезопасен.
В документации нет ничего, что указывало бы на то, что многократно используемые обработчики нельзя использовать повторно одновременно, хотя текущие реализации Microsoft, кажется, только используют их последовательно. Но, по крайней мере, теоретически, один экземпляр обработчика может быть повторно использован одновременно несколькими запросами, поэтому вам не следует полагаться на данные, которые могут быть изменены другими параллельными потоками.
Если вы не сохраняете какое-либо состояние в этом экземпляре (то есть: у вас нет никаких полей (так называемых "переменных класса")), тогда вы должны безопасно использовать его повторно.
По умолчанию ложь, чтобы быть на безопасной стороне.