Qu'est-ce qui est mieux:mise en cache via HttpContext.Current.Cache ou simplement un statique ?

StackOverflow https://stackoverflow.com/questions/5465243

Question

Hier soir, j'ai écrit mon premier IHttpModule pour effectuer un traitement de demande.J'utilise une expression régulière pour inspecter l'URL brute.Le IHttpModule sera appelé à chaque requête, il semble donc raisonnable de faire une sorte de mise en cache de l'objet d'expression régulière pour empêcher sa création à chaque requête.

Maintenant ma question...Qu'est-ce qui est mieux:Utilisez le HttpContext.Current.Cache pour stocker l'objet instancié ou pour utiliser un private static Regex dans mon module ?

J'attends avec impatience les raisons.Juste pour clarifier:l'expression régulière ne changera jamais et sera donc toujours la même chose.

Était-ce utile?

La solution

Si l'expression régulière ne va pas changer (et ce n'est généralement pas le cas), alors :

private static readonly Regex pattern = new Regex("...", RegexOptions.Compiled);

est le plus rapide et le plus efficace à tous points de vue

Autres conseils

Je suppose que ça dépend.Le cache intégré peut vous offrir un contrôle automatique de l'expiration, contrairement aux objets statiques.De plus, si vous souhaitez modifier le mécanisme de cache (disons que vous devez distribuer votre application), vous pouvez le faire avec le cache intégré.Les objets statiques ne sont que cela, statiques.

En règle générale, j'utiliserais un champ statique et enregistrerais la mise en cache lorsque vous avez besoin de plus de contrôle sur la durée de vie de l'objet.Voici deux raisons auxquelles je peux penser tout de suite :

  • Il y a toujours une certaine surcharge impliquée dans la mise en cache de l'objet et sa récupération du cache, au moins il y aura du boxing/unboxing
  • Vous devrez accéder à l'élément par une clé de cache plutôt que directement dans le code, cela rend l'application un peu plus volumineuse et plus difficile à comprendre

Vous devriez vous demander si vous besoin la fonctionnalité que vous obtenez en mettant l'objet en cache, c'est-à-diredurée de vie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top