107 votes

Quelle est l’utilité pour IHttpHandler.IsReusable ?

Je suis en train d'écrire un IHttpHandler et je vais avoir besoin de mettre en œuvre un IsReusable de la propriété. Quand je regarde la documentation MSDN , il dit:

Gets a value indicating whether another request can use the 
IHttpHandler instance.

Ce n'est pas très utile. Dans quelles situations doit-je utiliser une réutilisables gestionnaire et dans quelles situations doit-il pas être réutilisable?

Des questions de suivi:

  1. Qu'est-ce que la réutilisation?
  2. Puis-je maintenir l'état (c'est à dire de variables de classe) lors de l' Reusable = true?

96voto

Cette propriété indique si plusieurs demandes peuvent être traitées avec le même IHttpHandler instance. Par défaut à la fin d'un pipeline de demande tous les gestionnaires http qui sont placés dans le handlerRecycleList de la HttpApplication sont nulles. Si un gestionnaire est réutilisable, il ne sera pas mis à null et l'instance seront réutilisés dans la prochaine demande.

Le principal gain de performance est parce qu'il y aura moins d'objets à la gestion des déchets-collecte.
Le plus important de la douleur-point pour réutilisables gestionnaire, c'est qu'il doit être thread-safe. Ce n'est pas anodin et nécessite un certain effort.

Personnellement, je recommande de laisser le comportement par défaut (non réutilisable) si vous utilisez seulement une gestion des ressources, car le Garbage Collector devrait facilement manipuler. Le gain de performance de réutilisables gestionnaires est généralement négligeable par rapport au risque d'introduire difficile de trouver le filetage de bugs.

Si vous décidez de réutiliser le gestionnaire vous devriez éviter de maintenir l'état dans les variables de classe, parce que si le gestionnaire d'instance est accessible simultanément plusieurs requêtes de lecture/écriture de valeurs.

11voto

IrishChieftain Points 11173

Apparemment, cela empêche le gestionnaire dans la mémoire et capable de gérer plusieurs demandes. Lorsque la valeur false, il doit créer une nouvelle instance du gestionnaire pour chaque requête entrante.

Voici une question qui montre ce qui arrive lorsqu’il n’est pas utilisé correctement :

Etablissement des Images à l’aide du gestionnaire HttpHandler de diffusion

5voto

spender Points 51307

C'est moins cher à recycler le gestionnaire de à nouveau chaque fois une requête et le serveur chum moins de mémoire, en facilitant le travail du GC a à faire. Si le gestionnaire est dans un état où l'affaire à une nouvelle demande ne poserait pas de problème (c'est à dire un état dans le gestionnaire d'instance a été remis à zéro), alors il devrait être considéré comme étant réutilisable.

MODIFIER

Je ne sais pas si ma réponse est correcte définit ce qu'est la réutilisation. Il permet en effet simultané de les réutiliser de façon à ce que l'état serait préférable d'éviter ou gérés avec soin dans un thread-safe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X