2010-08-25 6 views
1

Que puis-je faire pour éviter le chargement répété de données statiques chaque fois qu'une page est chargée dans ASP.NET MVC2? C'est vraiment un gaspillage, et j'aimerais le réparer.ASP.NET MVC 2 - Éviter plusieurs fois l'interrogation de la base de données pour des données statiques?

Ma page principale comporte l'affichage Nom d'utilisateur + nom d'entreprise dans le coin supérieur droit. Mais en raison de la nature sans état de MVC, ces données doivent être consultées à chaque fois qu'une page est chargée, même si elle ne change jamais.

Dans les anciens jours webforms je voudrais simplement le jeter dans la session, mais cela semble être découragé dans MVC. De plus, l'application web fonctionne sur une webfarm, donc je ne veux vraiment pas utiliser la session. L'application Web contient déjà un certain nombre d'éléments de données statiques qui sont interrogés à chaque chargement de page (devise de l'utilisateur, taux d'imposition des utilisateurs, etc.). Je pense donc qu'un gain de performance peut être obtenu en les chargeant une seule fois. . Je ne suis pas sûr de la méthode MVC correcte (je suis encore assez nouveau pour MVC).

+0

Jetez un coup d'œil à l'utilisation de ProfileProvider dans .NET. Fonctionne plutôt bien pour ces situations, créer votre propre fournisseur de profil pour implémenter votre table/colonnes existante et aller de là. – Tommy

+0

Will Profile appelle-t-on la base de données chaque fois que vous chargez l'objet de profil? Si c'est le cas, cela ne change rien. –

+0

Il n'y a rien de mal à utiliser (par opposition à * mis * -using) 'Session' dans MVC. C'est un cache spécifique à l'instance du navigateur. Lorsque vous en avez besoin, utilisez-le. Ne mettez rien en rapport avec la sécurité et ne présumez pas que c'est lié aux connexions. –

Répondre

3

J'utilise toujours le cache ASP.NET intégré pour cela, définissez l'expiration de manière appropriée et vous êtes prêt à partir.

public void Blah() 
{ 
    var company = HttpRuntime.Cache.Get("Company") as string; 
    if (company == null) 
    { 
     company = FetchCompanyFromDb(); 
     HttpRuntime.Cache["Company"] = company; 
    } 

    return this.View(company); 
} 

Voir aussi cette question précédente:

Caching in asp.net-mvc

+0

À quel point cela fonctionne-t-il dans un scénario de ferme Web? Je suppose que Cache est en mémoire? Donc, si l'utilisateur est poussé d'une boîte Web à l'autre, le cache sera parti? –

+0

Le cache par défaut est en mémoire oui. Généralement, demander une fois par machine n'est pas si mal - c'est toujours beaucoup moins de requêtes que vous aviez précédemment. Cependant, supposons que cela soit difficile à calculer, la requête prend donc beaucoup de temps. Vous pourriez alors regarder Velocity ou Memcached qui sont des caches distribuées. Ceux-ci peuvent tous deux être utilisés à partir de ASP.NET MVC et vous permettront de partager le cache, mais seront plus lents que ceux en mémoire. –

0

Pourriez-vous résumer peut-être votre devise utilisateur/nom d'utilisateur/taxe etc dans un contrôle utilisateur et puis utilisez Caching sortie à ce sujet?

+0

Les données doivent également être disponibles dans le contrôleur, de cette façon ne fonctionnera probablement pas. –

Questions connexes