Значение bool IsReusable в интерфейсе обработчика http - PullRequest
128 голосов
/ 12 февраля 2009

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

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

Ответы [ 3 ]

150 голосов
/ 12 февраля 2009

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

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

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

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

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

46 голосов
/ 12 февраля 2009

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

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

3 голосов
/ 10 декабря 2010

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

По умолчанию false, чтобы быть на безопасной стороне.

...