2011-09-26 63 views
0

我正在使用運行速度非常慢的API,因此我的應用程序正在受到相當大的性能影響。我已經設法優化了一些代碼並大大減少了加載時間,但我還想在所有會話中緩存一些數據,以最大限度地減少我必須創建的服務器點擊量。現在有一個API調用需要將近10秒的時間才能運行,並且數據很少發生變化(可能每幾週會發生一次)。我想要做的是緩存結果以及檢索時間,並且只在自上次調用後經過一段時間後才調用API,否則返回緩存的結果。目前我在嘗試此:嘗試全局緩存C#WebService中的數據,但遇到問題

[WebMethod] 
    public List<RegionList> getRegionLists() { 
     if (GlobalAppCache.RegionListsLastUpdate == DateTime.MinValue || GlobalAppCache.RegionListsLastUpdate.AddMinutes(15) > DateTime.Now) 
     { 
      List<RegionList> regionLists = new List<RegionList>(); 
      // Do Some API Calls 
      GlobalAppCache.RegionListsLastUpdate = DateTime.Now; 
      GlobalAppCache.CachedRegionLists = regionLists; 
      return regionLists; 
     } 
     return GlobalAppCache.CachedRegionLists; 
    } 

隨着GlobalAppCache class是:

public class GlobalAppCache { 
    public static DateTime RegionListsLastUpdate{get;set;} 
    public static List<RegionList> CachedRegionLists{get;set;} 
} 

緩存的這個方法似乎並沒有被工作(API調用是由每一個時間,緩存的結果永遠不會被返回),而且我也無法得到任何與Application []數組有關的任何工作。任何人都可以將我指向正確的方向嗎?如果我可以得到這個工作,我可以通過在此GlobalAppCache對象中緩存更多項目來提高性能。謝謝!

+0

「這看起來沒有工作」是什麼意思? –

+0

「這似乎沒有工作」嗯,好嗎? –

+0

緩存結果的整個方法。爲了清晰起見,我將編輯原始帖子。 –

回答

0

好,我找到了解決我的問題的方法。顯然,在閱讀WebMethod標誌的文檔時,我錯過了CacheDuration屬性。由於我試圖緩存我的方法的輸出,簡單地改變

[WebMethod] 

[WebMethod(CacheDuration = (60*60*24*2))] 

定了!

1

嘗試寫入HttpApplicationState對象應用程序。當檢索數據時,您應該注意鑄造以糾正數據類型:

應用[「LastUpdate」] = DateTime.Now;

.. .. ..

object o = Application["LastUpdate"]; 
if (o != null) DateTime dLastUpdate = Convert.ToDateTime(o); 

... ...

Application對象死當WebService中被重新啓動運行的應用程序池/回收

相關問題