Каково использование IHttpHandler.IsReusable?
-
14-11-2019 - |
Вопрос
я пишу IHttpHandler
и мне нужно будет реализовать IsReusable
свойство.Когда я смотрю на Документация MSDN там написано:
Получает значение, указывающее, может ли другой запрос использовать экземпляр ihttphandler.
Это не очень полезно. В каких ситуациях мне следует использовать многоразовый обработчик, а в каких — его нельзя использовать повторно?
Последующие вопросы:
- Что такое повторное использование?
- Могу ли я поддерживать состояние (т.е.переменные класса), когда
Reusable = true
??
Решение
Это свойство указывает, можно ли обрабатывать несколько запросов с помощью одного и того же экземпляра IHttpHandler.По умолчанию в конце конвейера запросов все обработчики http, помещенные в handlerRecycleList HttpApplication, имеют значение null.Если обработчик можно использовать повторно, ему не будет присвоено значение null, и экземпляр будет повторно использован в следующем запросе.
Основным преимуществом является производительность, поскольку будет меньше объектов для сбора мусора.
Наиболее важной проблемой для многоразового обработчика является то, что он должен быть потокобезопасным.Это нетривиально и требует некоторых усилий.
Я лично предлагаю вам оставить поведение по умолчанию (не использовать повторно), если вы используете только управляемые ресурсы, поскольку сборщик мусора должен легко с ними справиться.Прирост производительности от многократного использования обработчиков обычно незначителен по сравнению с риском возникновения труднообнаружимых ошибок многопоточности.
Если вы решите повторно использовать обработчик, вам следует избегать сохранения состояния в переменных класса, поскольку при одновременном доступе к экземпляру обработчика несколько запросов будут записывать/читать значения.
Другие советы
По-видимому, это сохраняет обработчик в памяти и позволяет обрабатывать несколько запросов.Если установлено значение false, он должен создавать новый экземпляр обработчика для каждого входящего запроса.
Вот вопрос, который показывает, что происходит, когда он используется неправильно:
Потоковая передача изображений из базы данных с использованием HttpHandler
Дешевле перезапустить обработчик, чем создавать новый каждый раз, когда поступает запрос, и сервер будет использовать меньше памяти, что упрощает работу, которую должен выполнять сборщик мусора.Если обработчик находится в состоянии, когда обработка нового запроса не будет проблематичной (т.е.любое состояние в экземпляре обработчика было сброшено), то он должен квалифицироваться как многоразовый.
РЕДАКТИРОВАТЬ
Я не уверен, правильно ли мой ответ определяет, что такое повторное использование.На самом деле это допускает одновременное повторное использование, поэтому лучше избегать эффективного состояния или тщательно управлять потокобезопасным способом.