Сохраняйте объекты в кэшированной памяти при перекомпиляции в Visual Studio - PullRequest
2 голосов
/ 21 апреля 2011

У меня есть сайт 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 ]

2 голосов
/ 21 апреля 2011

Перекомпиляция вашего приложения приводит к перезапуску AppDomain, на котором оно размещается, и именно это избавляет ваш кеш. Вы могли бы:

  1. Попробуйте сохранить кэш на диске и прочитать его оттуда при запуске приложения. Это может быть быстрее.
  2. Используйте внепроцессный кеш, такой как Velocity
0 голосов
/ 21 апреля 2011

Я не верю в это. Когда вы публикуете новые библиотеки DLL, создается новый процесс, который запускает приложение. Поскольку вы используете кэш в памяти, все объекты будут удалены.

Вы можете "подогреть кеши" с помощью специального метода, который предварительно заполнит их все при публикации нового кода.

...