Вопрос

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

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

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

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

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

Решение

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

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

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

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

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

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

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

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

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

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

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

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