代码之家  ›  专栏  ›  技术社区  ›  Savvas Sopiadis

如何添加一个只能评估一次的天气信息?

  •  1
  • Savvas Sopiadis  · 技术社区  · 16 年前

    在ASP.MVC(1.0)项目中,我设法从RSS提要中获取天气信息并将其显示出来。我的问题是性能:

    我在site.master文件中放置了一个renderAction()方法(它工作得很好),但是我担心如果用户在菜单点2上单击几秒钟后,在菜单点3上单击几秒钟后,它将如何工作。这样就使得RSS提要一次又一次地请求新信息!

    这能以某种方式避免吗?(以某种方式只加载一次此信息?)

    事先谢谢!

    2 回复  |  直到 16 年前
        1
  •  2
  •   Darin Dimitrov    16 年前

    您可以使用服务器缓存:

    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);
    }
    
        2
  •  1
  •   griegs    16 年前

    我想如果我正在编写这个应用程序,我会下载天气细节,并将它们存储在本地的数据库或XML文件中,然后从中读取。

    天气变化不会太大,除非你是天气频道之类的。

    或者,您可以将其作为一个线程来编写,并在加载完成后让它返回报告。与2010年相比,这是小菜一碟。

    因此,要解决这一问题,可能需要赋予代码取消请求的能力,这样您就不能将其作为单线程应用程序运行。您将需要能够在线程上启动一个请求,并在另一个请求上取消该请求。

    面对这个问题,我将在本地托管它,并每隔一个小时运行一个进程来更新来自RSS提要的数据。

    推荐文章