A quoi sert IHttpHandler.IsReusable?

IHttpHandler un IHttpHandler et je vais devoir implémenter une propriété IsReusable . Lorsque je regarde la documentation MSDN, elle indique:

Obtient une valeur indiquant si une autre demande peut utiliser l’instance IHttpHandler.

Ce n’est pas très utile. Dans quelles situations dois-je utiliser un gestionnaire réutilisable et dans quelles situations ne devrait-il pas être réutilisable?

Questions de suivi:

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

Cette propriété indique si plusieurs requêtes peuvent être traitées avec la même instance IHttpHandler. Par défaut, à la fin d’un pipeline de requêtes, tous les gestionnaires HTTP placés dans le handlerRecycleList de HttpApplication sont définis sur null. Si un gestionnaire est réutilisable, il ne sera pas défini sur null et l’instance sera réutilisée dans la requête suivante.

Le gain principal est la performance car il y aura moins d’objects à collecter.
Le point le plus important pour le gestionnaire réutilisable est qu’il doit être sécurisé pour les threads. Ce n’est pas sortingvial et nécessite un certain effort.

Je vous suggère personnellement de laisser le comportement par défaut (non réutilisable) si vous utilisez uniquement des ressources gérées, car le ramasse-miettes doit les gérer facilement. Le gain de performance des gestionnaires réutilisables est généralement négligeable par rapport au risque d’introduire des bogues de threads difficiles à trouver.

Si vous décidez de réutiliser le gestionnaire, vous devez éviter de conserver l’état dans les variables de classe, car si l’instance de gestionnaire est consultée simultanément, plusieurs requêtes écrivent / lisent les valeurs.

Apparemment, cela garde le gestionnaire en mémoire et peut gérer plusieurs requêtes. Lorsqu’il est défini sur false, il doit créer une nouvelle instance du gestionnaire pour chaque demande entrante.

Voici une question qui montre ce qui se passe quand il n’est pas utilisé correctement:

Streaming Databased Images en utilisant HttpHandler

Il est moins coûteux de recycler le gestionnaire que d’en installer un nouveau chaque fois qu’une demande arrive et que le serveur consum moins de mémoire, ce qui facilite le travail de GC. Si le gestionnaire est dans un état où le traitement d’une nouvelle demande ne serait pas problématique (c.-à-d. Que tout état de l’instance de gestionnaire a été réinitialisé) , il devrait alors être considéré comme réutilisable.

MODIFIER

Je ne suis pas sûr si ma réponse définit correctement ce qu’est la réutilisation. Il permet en fait une réutilisation simultanée, de sorte que l’état serait mieux évité ou géré avec précaution en toute sécurité.