Значення bool IsReusable в інтерфейсі обробника http


130

Під час написання http-обробника / модуля є член інтерфейсу, який реалізує під назвою - bool IsReusable .

Яке значення цього члена? Якщо я встановив це значення false (або true), що це означає для решти веб-програми?


Відповіді:


152

Нормальною точкою входу для обробника є метод ProcessRequest. Однак у вас може бути код у конструкторі класу, який поєднує в собі деякі екземпляри, які дорого побудувати.

Якщо ви вказали багаторазове використання як істинне, програма може кешувати примірник і повторно використовувати його в іншому запиті, просто викликаючи його метод ProcessRequest знову і знову, без необхідності реконструювати його кожен раз.

У додатку буде створено стільки цих обробників, скільки потрібно для обробки поточного навантаження.

Мінус полягає в тому, що якщо кількість необхідних екземплярів більше, ніж наразі наявні екземпляри, вони викликають більше пам'яті. І навпаки, вони також можуть зменшити видиме використання пам'яті, оскільки їх екземплярне значення переживе цикли GC і не потрібно їх часто перерозподіляти.

Ще один застереження - вам потрібно бути впевненим, що в кінці виконання ProcessRequest стан об'єкта є таким, яким ви хотіли б для іншого запиту повторно використовувати об'єкт.


2
Ви згадуєте повторне використання об'єкта як ключову оптимізацію, досягнуту шляхом введення IsReusable = True. Чи встановить IsReusable = Неправдивий результат, що сервер ніколи не інстанціює кілька екземплярів обробника. IE - це усуває одночасні запити?
Ян

@Ian Я вважаю, що це функціонує як звичайна сторінка, коли багаторазове використання є помилковим, хоча я можу помилятися. Коли він може бути повторно використаний, він може працювати з 6 одночасними запитами з 2 або 3 екземплярами (лише приклад), тоді як, коли він не може бути повторно використаний, йому знадобляться екземпляри / процеси 1: 1. Я не можу уявити.
DavidScherer

47

Далі до відповіді AnthonyWJones, якщо ваш HTTP обробник повернеться trueзаIsReusable то ви повинні переконатися , що вона повністю поточно-.

У документації немає нічого, що вказувало б на те, що обробники багаторазового використання не можуть бути використані одночасно, хоча, як видається, поточні реалізації Microsoft лише повторно використовують їх. Але, принаймні теоретично, один екземпляр обробника може бути використаний одночасно декількома запитами, тому не слід покладатися на будь-які дані, які можуть бути змінені іншими одночасними потоками.


Вибачте за те, що є товстим, але хтось може, будь ласка, детальніше пояснити, що означає "контекстний перемикач". Якщо ви отримуєте доступ до речей із рядка sesson або query (content.Request.QueryString), це багаторазове використання чи ні?
zod

5
Контекстна комутація - це коли процесор припиняє обробку на одному потоці і починає обробляти на іншому. IE CPU перемикав його контекст з одного потоку на інший. Це відбувається постійно на ПК, це дало нам ілюзію багатозадачності, перш ніж з'явилися багатоядерні комп'ютери.
Ларрі Дюкек

Я не міг зрозуміти, коли ти сказав, що у будь-який час може бути контекстний перемикач . Коли ми вводимо URL і натискаємо клавішу Enter, це виконує один запит за один раз. правильно?

Контекстна комутація буде проблемою, коли кілька користувачів одночасно використовують додаток. Наприклад, якщо два користувачі хочуть одночасно оновлювати одну і ту ж запис, контекстний перемикач може спричинити проблеми.
Ізмаїл Смирнов

7
Це твердження про IsReusableнеобхідність безпеки потоку здається суперечним відповіді AnthonyWJones. Як я розумію, його третій абзац (додаток створить екземпляр стільки, скільки ...), екземпляр оброблювача, який може бути використаний повторно, не буде повторно використаний одночасно, а лише після завершення поточної обробки. Якщо це правда, то не потрібно бути безпечним для ниток.
Фредерік

3

Якщо ви не зберігаєте в цьому екземплярі будь-який стан (тобто: у вас немає полів (він же "класових змінних")), вам слід безпечно повторно використовувати його.

За замовчуванням помилковим є безпечна сторона.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.