Кэширование глобальных данных на веб-сайте iis - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть READONLY объектный граф, который кэшируется на одну минуту, чтобы его могли использовать все потоки (код ниже).

public class ObjectGraphCache
{
    static readonly Object storeLock = new object();

    public ObjectGraph AllForElection(int ElectionId, System.Web.Caching.Cache cache)
    {
        string key=string.Format("AllForElection{0}",
            ElectionId);
        int timout = int.Parse(ConfigurationManager.AppSettings["dbCacheTimeInSeconds"]);

        if (timout == 0)
        {
            ObjectGraph graph = new ObjectGraph();
            graph.AllForElection(ElectionId);
            return graph;
        }
        else
        {
            Object obj = cache[key];
            if (obj == null)
            {
                lock (storeLock)
                {
                    obj = cache[key]; // In case another page got the lock first and your are queued (Ensures only one get per cycle)
                    if (obj == null)
                    {
                        // Not in cache
                        ObjectGraph graph = new ObjectGraph();
                        graph.AllForElection(ElectionId);

                        cache.Insert(
                            key,
                            graph,
                            null,
                            DateTime.Now.Add(new TimeSpan(0, 0, timout)),
                            System.Web.Caching.Cache.NoSlidingExpiration);
                        return graph;
                    }
                }
            }
            return (ObjectGraph)obj;
        }

Однако я хочу знать: зачем использовать объект Cache, когда мне легче хранить объект READONLY в качестве статического.В нем хранится указатель на кучу, поэтому при его обновлении потоки, все еще обрабатывающие предыдущий объект указателей, будут переносить один штраф со старым объектом, а также мне не придется приводить объект из кэша перед его возвратом.Кто-нибудь видел какие-нибудь ошибки?

1 Ответ

1 голос
/ 06 апреля 2011

положить storeLock в прикладной переменной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...