Під час написання http-обробника / модуля є член інтерфейсу, який реалізує під назвою - bool IsReusable .
Яке значення цього члена? Якщо я встановив це значення false (або true), що це означає для решти веб-програми?
Під час написання http-обробника / модуля є член інтерфейсу, який реалізує під назвою - bool IsReusable .
Яке значення цього члена? Якщо я встановив це значення false (або true), що це означає для решти веб-програми?
Відповіді:
Нормальною точкою входу для обробника є метод ProcessRequest. Однак у вас може бути код у конструкторі класу, який поєднує в собі деякі екземпляри, які дорого побудувати.
Якщо ви вказали багаторазове використання як істинне, програма може кешувати примірник і повторно використовувати його в іншому запиті, просто викликаючи його метод ProcessRequest знову і знову, без необхідності реконструювати його кожен раз.
У додатку буде створено стільки цих обробників, скільки потрібно для обробки поточного навантаження.
Мінус полягає в тому, що якщо кількість необхідних екземплярів більше, ніж наразі наявні екземпляри, вони викликають більше пам'яті. І навпаки, вони також можуть зменшити видиме використання пам'яті, оскільки їх екземплярне значення переживе цикли GC і не потрібно їх часто перерозподіляти.
Ще один застереження - вам потрібно бути впевненим, що в кінці виконання ProcessRequest стан об'єкта є таким, яким ви хотіли б для іншого запиту повторно використовувати об'єкт.
Далі до відповіді AnthonyWJones, якщо ваш HTTP обробник повернеться true
заIsReusable
то ви повинні переконатися , що вона повністю поточно-.
У документації немає нічого, що вказувало б на те, що обробники багаторазового використання не можуть бути використані одночасно, хоча, як видається, поточні реалізації Microsoft лише повторно використовують їх. Але, принаймні теоретично, один екземпляр обробника може бути використаний одночасно декількома запитами, тому не слід покладатися на будь-які дані, які можуть бути змінені іншими одночасними потоками.
IsReusable
необхідність безпеки потоку здається суперечним відповіді AnthonyWJones. Як я розумію, його третій абзац (додаток створить екземпляр стільки, скільки ...), екземпляр оброблювача, який може бути використаний повторно, не буде повторно використаний одночасно, а лише після завершення поточної обробки. Якщо це правда, то не потрібно бути безпечним для ниток.
Якщо ви не зберігаєте в цьому екземплярі будь-який стан (тобто: у вас немає полів (він же "класових змінних")), вам слід безпечно повторно використовувати його.
За замовчуванням помилковим є безпечна сторона.