在Visual Studio中重新编译时保留我的缓存内存对象

时间:2011-04-21 14:55:29

标签: visual-studio-2010 asp.net-mvc-3 c#-4.0 outputcache

我有一个使用内存对象缓存的MVC 3站点。

当网站第一次被点击时,构建缓存需要大约一分钟,一旦为每个人建立了它的速度非常快。

当我开发时,我不得不减少缓存对象的数量,因为每次我重新填充我的项目时它会丢弃缓存并且必须重建它。

有没有办法可以设置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);
    }

任何帮助总是适用的

Truegilly

2 个答案:

答案 0 :(得分:2)

重新编译您的应用程序会导致托管它的AppDomain重新启动,这就是处理缓存的原因。你可以:

  1. 尝试将缓存保存到磁盘,并在应用启动时从那里读取缓存。它可能会更快。
  2. 使用Velocity
  3. 等进程外缓存

答案 1 :(得分:0)

我不相信。发布新DLL时,将创建运行该应用程序的新进程。由于您使用的是内存缓存,因此将删除所有对象。

您可以使用一种特殊方法“加热缓存”,这种方法会在您发布新代码时预先填充它们。