Что такое использование для IHttpHandler.IsReusable?
Я пишу a IHttpHandler
и мне нужно реализовать IsReusable
собственность. Когда я смотрю на Примечание Он говорит:
возвращает значение, указывающее, может ли другой запрос использовать Экземпляр IHttpHandler.
Это не очень полезно. в каких ситуациях я должен использовать многоразовый обработчик и в каких ситуациях он не должен быть многоразовым?
последующие вопросы:
- что использовать?
- могу ли я поддерживать состояние (т. е. переменные класса), когда
Reusable = true
??
3 ответа:
Это свойство указывает, можно ли обрабатывать несколько запросов с одним и тем же экземпляром IHttpHandler. По умолчанию в конце конвейера запросов все обработчики http, помещенные в список handlerRecycleList объекта HttpApplication, имеют значение null. Если обработчик повторно используется, он не будет установлен в null, и экземпляр будет повторно использован в следующем запросе.
главным преимуществом является производительность, потому что будет меньше объектов для сбора мусора.
Самая важная болевая точка для многоразового обработчика является то, что он должен быть потокобезопасным. Это не тривиально и требует некоторых усилий.Я лично предлагаю вам оставить поведение по умолчанию (не многоразовое), если вы используете только управляемые ресурсы, потому что сборщик мусора должен легко обрабатывать их. Прирост производительности от многоразовых обработчиков обычно незначителен по сравнению с риском введения труднодоступных ошибок резьбы.
Если вы решили повторно использовать обработчик, вы должны избегать поддержания состояния в переменных класса, потому что если экземпляр обработчика доступен одновременно, несколько запросов будут записывать/читать значения.
по-видимому, это сохраняет обработчик в памяти и способен обрабатывать несколько запросов. Если установлено значение false, он должен создать новый экземпляр обработчика для каждого входящего запроса.
вот вопрос, который показывает, что происходит, когда он не используется должным образом:
дешевле утилизировать обработчик, чем создавать его каждый раз, когда приходит запрос, и сервер будет использовать меньше памяти, облегчая работу GC. Если обработчик находится в состоянии, когда работа с новым запросом не будет проблематичной
(т. е. любое состояние в экземпляре обработчика было сброшено), то он должен квалифицироваться как многоразовый.EDIT
Я не уверен, что мой ответ правильно определяет, что такое повторное использование. Это на самом деле позволяет одновременное повторное использование, поэтому эффективное состояние лучше всего избегать или тщательно управлять потокобезопасным способом.