Vraag Wat is het nut van IHttpHandler.IsReusable?


Ik schrijf een IHttpHandler en ik zal een moeten implementeren IsReusable eigendom. Als ik naar de kijker kijk MSDN-documentatie het zegt:

Krijgt een waarde die aangeeft of een ander verzoek de   IHttpHandler-instantie.

Dit is niet erg nuttig. In welke situaties moet ik een herbruikbare afhandelingsmachine gebruiken en in welke situaties zou het niet herbruikbaar moeten zijn?

Vervolg vragen:

  1. Wat is hergebruik?
  2. Kan ik status (dat wil zeggen, klassenvariabelen) behouden wanneer Reusable = true??

97
2018-03-31 13:51


oorsprong


antwoorden:


Deze eigenschap geeft aan of meerdere aanvragen kunnen worden verwerkt met dezelfde IHttpHandler-instantie. Standaard staan ​​aan het einde van een pijplijn voor een verzoek alle HTTP-handlers die in de handlerRecycleList van de HttpApplication zijn geplaatst op nul. Als een handler herbruikbaar is, wordt deze niet op nul gezet en wordt de instantie opnieuw gebruikt in de volgende aanvraag.

De belangrijkste winst is de prestaties, omdat er minder objecten zullen zijn om ze te verzamelen.
Het belangrijkste pijnpunt voor herbruikbare afhandelingsmachines is dat deze draadveilig moet zijn. Dit is niet triviaal en vereist enige inspanning.

Ik stel persoonlijk voor dat je het standaardgedrag (niet herbruikbaar) achterlaat als je alleen beheerde bronnen gebruikt, omdat de Garbage Collector ze gemakkelijk zou moeten behandelen. De prestatiewinst van herbruikbare handlers is meestal verwaarloosbaar in vergelijking met het risico van het introduceren van moeilijk te vinden threading-bugs.

Als u besluit de handler opnieuw te gebruiken, moet u voorkomen dat de status in klassenvariabelen gehandhaafd blijft, omdat als de handlerinstantie tegelijkertijd wordt geopend, meerdere verzoeken de waarden zullen schrijven / lezen.


89
2018-03-31 14:03



Blijkbaar houdt dit de handler in het geheugen en kan hij meerdere aanvragen afhandelen. Indien ingesteld op false, moet het een nieuw exemplaar van de handler maken voor elke inkomende aanvraag.

Hier is een vraag die laat zien wat er gebeurt als het niet correct wordt gebruikt:

Streaming van gegevensbestanden met behulp van HttpHandler


11
2018-03-31 13:57



Het is goedkoper om de handler te recyclen dan naar een nieuwe elke keer dat er een aanvraag binnenkomt en de server zal minder geheugen vinden, waardoor het werk dat GC moet uitvoeren, wordt verminderd. Als de handler zich in een staat bevindt waar het behandelen van een nieuw verzoek geen probleem zou zijn (d.w.z. elke status in de handlerinstantie is gereset), dan moet het kwalificeren als herbruikbaar.

BEWERK

Ik weet niet zeker of mijn antwoord correct definieert wat hergebruik is. Het maakt feitelijk gelijktijdige hergebruik mogelijk, dus effectieve status kan het beste worden vermeden of zorgvuldig worden beheerd op een manier die veilig is voor threads.


5
2018-03-31 13:55