2011-11-24 4 views
1

J'ai un code comme suitQuels frais généraux à l'aide HttpContext.Items

var MyObjectInstance = httpContext.Items[key] as MyObject 

Que les frais généraux est là dans ce code. A-t-il besoin de désérialiser l'objet ainsi que de faire une distribution? Y a-t-il un avantage significatif en termes de performances pour réduire le nombre de ces appels?

Répondre

4

HttpContext.Items retourne vraiment un HashTable (en mémoire dictionnaire) - donc appel, comme httpContext.Items[key] as MyObject s'est essentiellement

  1. Cherchez dans les dictionnaire pour ladite clé
  2. Cast l'objet

Il n'y a pas de désérialisation

L'avantage lié au rendement sera un terme relatif - combien fois où de tels appels sont faits? Ce serait un appel très rapide, sauf si vous faites des milliers d'appels dans un court laps de temps, je ne m'inquiéterais pas trop à ce sujet.

+0

Merci pour l'info. Intéressant. Il est appelé plusieurs fois pour chaque demande d'un site à très grand volume. J'envisage juste un refactoring qui ferait en sorte qu'il ne serait appelé qu'une seule fois par demande. J'essaie juste de décider si ça en vaut la peine. –

+0

@ Mark909, cela dépend de l'endroit où il est appelé? Par exemple, si le code de la page l'appelle à plusieurs reprises, vous pouvez mettre en cache la valeur dans une variable. Les contrôles utilisateur peuvent y accéder à partir de la page. Vous devez prendre une décision en comparant votre temps moyen de réponse à la demande avec le temps de cet appel (qui sera de l'ordre de quelques micro-secondes). – VinayC

+0

Il est appelé à partir d'un objet instancié Castle sur un PerWebRequest afin que je puisse stocker cela comme variable dans cet objet plutôt que de le lire hors de httpContext à chaque fois. –

-2

HttpContext est très grand et devrait donc être évité. Sur une note de côté, il est scellé, et ne peut donc pas être testé et raillé. Items est un objet hashtable contenant des paires de clés et de valeurs, donc relativement rapide.

var MyObjectInstance = httpContext.Items[key] = new MyObject(); 

Cet article peut aider: http://msdn.microsoft.com/en-us/magazine/cc163730.aspx

+0

merci pour le downvote avec aucun commentaire! –

Questions connexes