2010-05-18 8 views
1

Dans un projet ASP.MVC (1.0), j'ai réussi à obtenir des informations météorologiques à partir d'un flux RSS et à les afficher. Le problème que j'ai est la performance:Comment ajouter une information météo à évaluer une seule fois?

J'ai mis une méthode RenderAction() dans le fichier Site.Master (qui fonctionne parfaitement) mais je suis inquiet de la façon dont il se comportera si un utilisateur clique sur le point de menu 1, après quelques secondes sur le point de menu 2, après quelques secondes sur le point de menu 3, .... rendant ainsi le flux RSS demandant de nouvelles infos encore et encore!

Est-ce que cela peut être évité? (En quelque sorte charger cette information qu'une seule fois?)

Merci à l'avance!

Répondre

2

Vous pouvez utiliser le cache du serveur:

public ActionResult Index() 
{ 
    // try getting the weather from the cache 
    object weather = HttpContext.Cache.Get("weather"); 

    if (weather == null) 
    { 
     // weather not cached => fetch it from RSS 
     weather = Repository.FetchWeather(); 

     // store in cache for the 5 next hours 
     HttpContext.Cache.Add(
      "weather", 
      weather, 
      null, 
      DateTime.Now.AddHours(5), 
      Cache.NoSlidingExpiration, 
      CacheItemPriority.Normal, 
      null 
     ); 
    } 
    return View(weather); 
} 
+0

Merci beaucoup Darin! Pour être honnête (encore) ... jamais pensé non plus. Je dois admettre que cela est mis en œuvre très rapidement et très clairement. Je ne sais pas comment cela se passera en production, mais je pense qu'il est préférable de se débrouiller avec des fichiers XML (bien que ce soit aussi une bonne solution). Merci encore beaucoup! –

1

Je pense que si j'écrivais cette application, je téléchargerais les détails de la météo et les stockerais dans un fichier db ou xml localement et en lirais.

Le temps ne change pas tellement que vous avez besoin de mises à jour minute par minute, sauf si vous êtes le canal météo ou quelque chose.

Vous pouvez également écrire ceci comme un fil de discussion et le faire rapporter quand il est chargé. VS 2010 en fait un morceau de gâteau. Donc, pour résoudre ce problème, donnez à votre code la possibilité d'annuler une requête et pour ce faire, vous ne pouvez pas l'exécuter en tant qu'application à un seul thread. Vous devrez avoir la possibilité de lancer une requête sur un thread et l'annuler sur une autre demande. Face à cela je l'hébergerais localement et j'exécuterais un processus toutes les heures pour mettre à jour les données du flux RSS.

+0

Merci pour la réponse! Pour être honnête, je n'ai pas pensé à stocker des données localement ... mais c'est tout à fait logique! Je vais essayer! –