Какая польза от IHttpHandler.IsReusable?

Я пишу IHttpHandler и мне нужно будет реализовать IsReusable имущество. Когда я смотрю на документацию MSDN, там написано:

Получает значение, указывающее, может ли другой запрос использовать экземпляр IHttpHandler.

Это не очень полезно. В каких ситуациях я должен использовать обработчик многократного использования и в каких ситуациях он не должен использоваться повторно?

Последующие вопросы:

  1. Что такое повторное использование?
  2. Могу ли я поддерживать состояние (т.е. переменные класса), когда Reusable = true??

3 ответа

Решение

Это свойство указывает, можно ли обрабатывать несколько запросов с одним и тем же экземпляром IHttpHandler. По умолчанию в конце конвейера запросов все обработчики http, которые помещаются в handlerRecycleList HttpApplication, устанавливаются в null. Если обработчик можно использовать повторно, ему не будет присвоено значение null, а экземпляр будет повторно использован в следующем запросе.

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

Я лично предлагаю вам оставить поведение по умолчанию (не для повторного использования), если вы используете только управляемые ресурсы, потому что сборщик мусора должен легко их обрабатывать. Повышение производительности от многоразовых обработчиков обычно незначительно по сравнению с риском появления трудно обнаруживаемых ошибок потоков.

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

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

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

Потоковая передача изображений с использованием HttpHandler

Утилизировать обработчик дешевле, чем новый каждый раз, когда поступает запрос, и сервер будет загружать меньше памяти, упрощая работу, которую должен выполнить GC. Если обработчик находится в состоянии, когда обработка нового запроса не будет проблематичной (т. Е. Любое состояние в экземпляре обработчика было сброшено), то его следует квалифицировать как повторно используемое.

РЕДАКТИРОВАТЬ

Я не уверен, что мой ответ правильно определяет, что такое повторное использование. На самом деле он допускает одновременное повторное использование, поэтому эффективно избегать состояния или тщательно управлять им потокобезопасным способом.

Другие вопросы по тегам