2011-04-21 40 views
2

我有一個使用內存對象緩存的MVC 3站點。在Visual Studio中重新編譯時將我保存在緩存的內存對象中

當網站第一次被擊中時,建立緩存需要大約一分鐘的時間,一旦構建完成後,每個人都可以快速建立緩存。

當我開發時,我不得不減少緩存對象的數量,因爲每次我重新編譯我的項目時,它都會丟棄緩存並重建它。

有沒有一種方法可以設置Visual Studio,以便在重新編譯時保持內存緩存?

這裏是我的一些代碼,我使用的緩存....

/// <summary> 
    /// Method to get all the prices 
    /// </summary> 
    public static List<DB2011_PriceRange> AllPrices 
    { 
     get 
     { 
      lock(_PriceLock) 
      { 
       if (HttpRuntime.Cache["Prices"] != null) 
       { 
        return (List<DB2011_PriceRange>)HttpRuntime.Cache["Prices"]; 
       } 
       else 
       { 
        PopulatePrices(); 
        return (List<DB2011_PriceRange>)HttpRuntime.Cache["Prices"]; 
       } 
      } 
     } 
    } 

    /// <summary> 
    /// Poplate the Cache containing the prices 
    /// </summary> 
    private static void PopulatePrices() 
    { 
     // clear the cache and the list object 
     ClearCacheAndList("Trims", ref ListAllPrices); 

     using(var DB = DataContext.Get_DataContext) 
     { 
      ListAllPrices = (from p in DB.DB2011_PriceRange 
          select p).ToList(); 
     } 

     // add the list object to the Cache 
     HttpRuntime.Cache.Add("Prices", ListAllPrices, null, DateTime.Now.AddHours(24), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null); 
    } 

任何幫助總是appricaiated

Truegilly

+0

速度 - > http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=b24c3708-eeff-4055- a867-19b5851e7cd2 – JGilmartin 2011-04-21 15:58:42

回答

2

重新編譯您的應用程序會導致承載它的AppDomain被重新啓動,這就是您的緩存處置。您可以:

  1. 嘗試將緩存保存到磁盤並在應用程序啓動時從此處讀取它。它可能會更快。
  2. 使用過程外的一個高速緩存如Velocity
+0

這很有用 - > http://stephenwalther.com/blog/archive/2008/08/28/asp-net-mvc-tip-39-use-the-velocity-distributed-cache.aspx – JGilmartin 2011-04-21 15:57:36

0

我不這麼認爲。當您發佈新的DLL時,會創建一個運行該應用程序的新進程。由於您使用的是內存緩存,因此所有對象都將被刪除。

您可以使用一種特殊的方法「預熱緩存」,這會在您發佈新代碼時預先填充它們。

相關問題