2010-05-18 6 views
1

ASP.MVC (1.0) 프로젝트에서 나는 RSS 피드에서 기상 정보를 얻고 그것을 보여 주었다. 내가 가진 문제는 성능입니다 :evalueated 될 날씨 정보를 한 번만 추가하는 방법?

완벽하게 작동하는 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

대단히 감사합니다. 솔직히 (다시) ... 결코 이것에 대해서 생각하지 않았습니다. 나는 이것이 매우 빠르고 매우 명확하게 구현되었음을 인정해야한다. 프로덕션 환경에서 어떻게 작동 할 지 모르지만 XML 파일을 사용하는 것이 바람직합니다 (좋은 해결책이기는하지만). 다시 한 번 감사드립니다! –

1

내가 날씨 정보를 다운로드하여 로컬에서 db 또는 xml 파일에 저장하고 읽는이 앱을 쓰고 있었다면 생각합니다.

날씨가 날씨 채널이나 다른 것을 제외하고는 분 단위로 업데이트해야하는만큼 많이 변경되지는 않습니다.

또는 스레드로 작성하고로드가 완료되면 다시보고하도록 할 수 있습니다. VS 2010은 이것을 케이크 한 조각으로 만듭니다.

그래서이 문제를 해결하려면 요청을 취소하고 단일 스레드 응용 프로그램으로이를 실행할 수없는 코드를 제공하는 것이 좋습니다. 스레드에서 요청을 시작하고 다른 요청에서이를 취소 할 수 있어야합니다.

내가 로컬로 호스트하고 RSS 피드의 데이터를 업데이트하기 위해 매시간마다 프로세스를 실행합니다.

+0

감사합니다 응답을! 솔직히 나는 로컬에 데이터를 저장하는 것에 대해 생각하지 않았다 ... 그러나 그것은 완벽하게 이해된다! 나는 이것을 시도 할 것이다! –

관련 문제