При написании http-обработчика/модуля существует интерфейс для реализации вызываемого - bool IsReusable.
В чем смысл этого участника? Если я установил его в false (или true), что это значит для остальной части веб-приложения?
При написании http-обработчика/модуля существует интерфейс для реализации вызываемого - bool IsReusable.
В чем смысл этого участника? Если я установил его в false (или true), что это значит для остальной части веб-приложения?
Нормальной точкой входа для обработчика является метод ProcessRequest. Однако у вас может быть код в конструкторе класса, который объединяет некоторые значения экземпляров, которые дорого строить.
Если вы укажете, что Reusable является истинным, приложение может кэшировать экземпляр и повторно использовать его в другом запросе, просто вызывая его метод ProcessRequest снова и снова, без необходимости его реконструировать каждый раз.
Приложение будет создавать экземпляры таких обработчиков, которые должны обрабатывать текущую нагрузку.
Недостатком является то, что если количество требуемых экземпляров больше, чем присутствующие в настоящее время экземпляры, они вызывают больший объем памяти. И наоборот, они также могут уменьшить очевидное использование памяти, поскольку их значение экземпляра выживет в циклах GC и не нужно часто перераспределять.
Еще одно предостережение - вы должны быть уверены, что в конце выполнения ProcessRequest состояние объекта будет таким, каким вы хотите, чтобы другой запрос повторно использовал объект.
В ответ на ответ AnthonyWJones, если ваш обработчик HTTP возвращает true
для IsReusable
, тогда вы должны убедиться, что он полностью потокобезопасен.
В документации нет ничего, что указывало бы, что повторно используемые обработчики не могут быть повторно использованы одновременно, хотя текущие реализации Microsoft только повторяют их последовательно. Но, по крайней мере теоретически, один экземпляр обработчика может повторно использоваться одновременно несколькими запросами, поэтому вы не должны полагаться на какие-либо данные, которые могут быть изменены другими параллельными потоками.
Если вы не сохраняете какое-либо состояние в этом экземпляре (т.е.: у вас нет каких-либо полей (иначе называемых "переменными класса" ), тогда вы должны быть осторожны в повторном использовании.
Это по умолчанию false, чтобы быть в безопасности.