2010-05-18 35 views
1

在ASP.MVC(1.0)項目中,我設法從RSS提要中獲取天氣信息並顯示出來。我有的問題是性能:如何將天氣信息添加到只評估一次?

我已經把Site.Master文件中的RenderAction()方法(它完美地工作),但我擔心如果用戶點擊菜單點1後,它將如何行爲,之後在菜單點2之後幾秒鐘,在菜單點3之後幾秒鐘,....因此使得RSS饋送一次又一次地請求新的信息!

這可以以某種方式避免? (以某種方式加載此信息只有一次?)

在此先感謝!

回答

2

您可以使用服務器緩存:

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

非常感謝Darin!老實說(再次)......從來沒有想過這個。我不得不承認,這是非常快速和非常明確的實施。不知道它如何在生產中表現出來,但我認爲它比XML文件混亂更好(儘管這也是一個很好的解決方案)。 非常感謝! – 2010-05-19 18:36:36

1

我想如果我正在寫這個應用程序,我會下載天氣細節並將它們存儲在本地的db或xml文件中並從中讀取。

除非您是天氣頻道或其他東西,否則天氣並不會改變您需要的每分鐘更新。

另外,你可以把它寫成一個線程,並在加載完成時向它報告。 VS 2010使這一塊蛋糕順便說一句。

因此,要解決這個問題,可能會讓您的代碼有能力取消請求,並且無法將其作爲單線程應用程序運行。您將需要有能力在線程上啓動請求並在另一個請求中取消該請求。

面對我將在本地託管它並每隔一小時運行一個進程來更新RSS源中的數據。

+0

感謝您的答覆!說實話,我沒有考慮在本地存儲數據......但它非常有意義!我會試試這個! – 2010-05-19 06:16:57