Podczas pisania modułu obsługi / modułu http istnieje element interfejsu do zaimplementowania o nazwie - bool IsReusable .
Jakie jest znaczenie tego członka? Jeśli ustawię wartość false (lub true), co to oznacza dla pozostałej części aplikacji internetowej?
asp.net
httphandler
ihttphandler
GurdeepS
źródło
źródło
Odpowiedzi:
Normalnym punktem wejścia dla procedury obsługi jest metoda ProcessRequest. Jednak możesz mieć kod w konstruktorze klasy, który składa razem niektóre wartości instancji, które są drogie w tworzeniu.
Jeśli określisz opcję Reusable na true, aplikacja może buforować instancję i używać jej ponownie w innym żądaniu, po prostu wywołując jej metodę ProcessRequest, bez konieczności jej odtwarzania za każdym razem.
Aplikacja utworzy wystąpienie tylu z tych programów obsługi, ile potrzeba do obsługi bieżącego obciążenia.
Wadą jest to, że jeśli liczba potrzebnych instancji jest większa niż obecnie obecne, powodują one użycie większej ilości pamięci. I odwrotnie, mogą również zmniejszyć pozorne użycie pamięci, ponieważ ich wartość instancji przetrwa cykle GC i nie musi być często ponownie przydzielana.
Innym zastrzeżeniem jest to, że musisz mieć pewność, że pod koniec wykonywania ProcessRequest stan obiektu jest taki, jak chcesz, aby kolejne żądanie ponownego użycia obiektu.
źródło
W nawiązaniu do odpowiedzi AnthonyWJones męska, jeśli HTTP Wózek powraca
true
doIsReusable
wówczas należy upewnić się, że jest on całkowicie bezpieczny wątku.W dokumentacji nie ma nic, co wskazywałoby na to, że programy obsługi wielokrotnego użytku nie mogą być ponownie używane jednocześnie, chociaż obecne implementacje firmy Microsoft wydają się tylko ponownie używać ich kolejno. Ale przynajmniej w teorii pojedyncza instancja procedury obsługi mogłaby zostać ponownie wykorzystana jednocześnie przez wiele żądań, więc nie należy polegać na żadnych danych, które mogą zostać zmodyfikowane przez inne współbieżne wątki.
źródło
IsReusable
wymaganiu bezpieczeństwa nici wydaje się być sprzeczne z odpowiedzią Anthony'ego WJonesa. Jak rozumiem, jego trzeci akapit (aplikacja utworzy wystąpienie tylu z ...), instancja obsługi wielokrotnego użytku nie zostanie ponownie wykorzystana jednocześnie, ale dopiero po zakończeniu bieżącego przetwarzania. Jeśli to prawda, nie ma potrzeby zabezpieczania się wątkami.Jeśli nie przechowujesz żadnego stanu w tej instancji (tj. Nie masz żadnych pól (zwanych również „zmiennymi klas”)), możesz bezpiecznie użyć go ponownie.
Po bezpiecznej stronie domyślnie jest fałsz.
źródło